📜  图腾柱与开式收藏家的区别(1)

📅  最后修改于: 2023-12-03 15:07:35.952000             🧑  作者: Mango

图腾柱与开式收藏家的区别

在程序设计中,图腾柱和开式收藏家是两种常见的设计模式,它们的主要区别如下:

图腾柱

图腾柱模式是一种基于继承实现的设计模式,它的主要思想是将一个大的抽象类分解成多个小的、具体的子类,每个子类只实现自己的特定功能,通过多态来实现运行时动态选择子类实例的对象。

图腾柱模式的优点是程序的结构清晰,易于维护和扩展,同时也遵循了开闭原则,也就是说当要增加或者变更功能时,只需要增加或者修改子类即可。

下面是一个简单的图腾柱示例代码:

abstract class Animal {
    public abstract void move();
}

class Cat extends Animal {
    public void move() {
        System.out.println("Cat moves...");
    }
}

class Dog extends Animal {
    public void move() {
        System.out.println("Dog moves...");
    }
}

class Client {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.move();
        animal = new Cat();
        animal.move();
    }
}
开式收藏家

与图腾柱模式不同,开式收藏家模式是基于组合实现的设计模式,它的主要思想是将对象拆分为多个独立的部分,然后通过组合这些独立的部分来实现完整的对象。

开式收藏家模式的优点是可以动态地创建或者拆解对象,基于组合的方式也行的更为灵活,同时也遵循了开闭原则,只需要添加或者删除组成部分即可实现功能的扩展和变更。

下面是一个简单的开式收藏家示例代码:

interface AirplanePart {
    void fly();
}

class Engine implements AirplanePart {
    public void fly() {
        System.out.println("Engine starts and powers airplane...");
    }
}

class Wing implements AirplanePart {
    public void fly() {
        System.out.println("Wing lifts airplane off ground...");
    }
}

class Airplane {
    private Engine engine;
    private Wing wing;

    public Airplane() {
        engine = new Engine();
        wing = new Wing();
    }

    public void fly() {
        engine.fly();
        wing.fly();
    }
}

class Client {
    public static void main(String[] args) {
        Airplane airplane = new Airplane();
        airplane.fly();
    }
}

以上就是图腾柱和开式收藏家的主要区别和优缺点,开发者们可以根据实际需求选择合适的设计模式来实现代码。