设计模式一
  3QmkG8wxVV0j 2023年11月25日 13 0

设计模式通常分为三种类型:创建型、结构型和行为型。以下是一些常用的设计模式:

创建型模式:

  1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。
  2. 工厂方法模式(Factory Method):提供创建对象的接口,让子类决定实例化哪一个类。
  3. 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
  4. 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式(Prototype):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

结构型模式:

  1. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。
  2. 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  3. 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责。
  4. 组合模式(Composite):将对象组合成树形结构以表示"部分-整体"的层次结构。
  5. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

行为型模式:

  1. 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
  2. 模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
  3. 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并被自动更新。
  4. 迭代器模式(Iterator):提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
  5. 命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。

这些设计模式都有各自的优点和适用场景,选择哪种设计模式取决于具体的问题和设计情况。

其中策略模式和接口继承实现类都是面向对象设计的重要概念,它们各有优缺点:

策略模式:

优点:

  1. 提供了一种替代继承的方法,可以避免使用多重条件判断。
  2. 提供了一种可以插入新的算法或策略的方法,使得代码更加灵活。
  3. 可以在运行时改变对象的行为。

缺点:

  1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  2. 会产生很多策略类,增加了系统类和对象的个数。

接口继承实现类:

优点:

  1. 提供了一种定义行为的方法,使得实现类可以按照接口定义的规则来实现功能。
  2. 提供了一种代码复用的方法,通过继承接口,可以避免在每个实现类中重复相同的代码。

缺点:

  1. 接口定义的行为是静态的,不能在运行时改变。
  2. 如果接口定义的行为过多,实现类可能会被迫实现一些它不需要的方法。

总的来说,策略模式和接口继承实现类都有其适用的场景,需要根据具体的需求来选择使用哪一种。

策略模式示例代码:

// 首先,我们定义一个策略接口
interface Strategy {
    void execute();
}

// 然后,我们创建实现策略接口的具体策略类
class ConcreteStrategyA implements Strategy {
    public void execute() {
        System.out.println("Strategy A");
    }
}

class ConcreteStrategyB implements Strategy {
    public void execute() {
        System.out.println("Strategy B");
    }
}

// 最后,我们创建一个上下文类,它会使用某个策略
class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

// 在main方法中,我们可以这样使用策略模式
public class Test {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStrategyA());
        context.executeStrategy();  // 输出: Strategy A

        context.setStrategy(new ConcreteStrategyB());
        context.executeStrategy();  // 输出: Strategy B
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
  llt0tXqeaug8   2023年11月22日   15   0   0 设计模式
  zzJeWaZlVwfH   2023年11月02日   28   0   0 设计模式ideci
3QmkG8wxVV0j