public class Factory {
public BMW createBMW(int type) {
switch (type) {
case 320:
return new BMW320();
case 523:
return new BMW523();
default:
break;
}
return null;
}
}
但是这样违反了开闭原则,如果我们增加一种新的类型的车子。就需要修改代码
工厂方法定义了一个工厂接口,为每一种汽车都创建一个工厂
interface FactoryBMW {
BMW createBMW();
}
public class FactoryBMW320 implements FactoryBMW{
@Override
public BMW320 createBMW() {
return new BMW320();
}
}
public class FactoryBMW523 implements FactoryBMW {
@Override
public BMW523 createBMW() {
return new BMW523();
}
}
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象
//创建工厂的接口
public interface AbstractFactory {
//制造发动机
public Engine createEngine();
//制造空调
public Aircondition createAircondition();
}
//为宝马320系列生产配件
public class FactoryBMW320 implements AbstractFactory{
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public Aircondition createAircondition() {
return new AirconditionA();
}
}
//宝马523系列
public class FactoryBMW523 implements AbstractFactory {
@Override
public Engine createEngine() {
return new EngineB();
}
@Override
public Aircondition createAircondition() {
return new AirconditionB();
}
}
访问者模式
在被访问的类里面加一个对外提供接待访问者的接口。
在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。 建造者模式
数据基础类继承自同一个父类,访问者也继承自同一个类,但是定义了许多针对数据基础类的重载方法
//数据基础父类
public interface ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
}
//数据基础子类
public class Keyboard implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
//访问者类
public interface ComputerPartVisitor {
public void visit(Computer computer);
public void visit(Mouse mouse);
public void visit(Keyboard keyboard);
public void visit(Monitor monitor);
}
abstract Class Coffee { public abstract void Drink(); }
Class LightCoffee:Coffee{ public void Drink(){ Console.WriteLine("来杯淡咖啡") } }
abstract Class CoffeeDecorator :Coffee{ protected Coffee co; public abstract void AddSomething(); }
//然后我们就可以不断的进行装饰