简单工厂
public class OperationFactory{
public static Operation createOperate(String operate){
Operation oper=null;
switch(operate){
case "+":
oper=new OperationAdd();
break;
case "-":
oper=new OperationSub();
break;
case "*":
oper=new OperationMul();
break;
case "/":
oper=new OperationDiv();
break;
}
return oper;
}
}
根据传参来确定 new的对象,但是如果要增加“工厂”生产的产品种类(new新种类的对象),还是要修改工厂类的代码(switch分支)。工厂方法可以解决这个问题。
工厂方法
//工厂类接口
interface IFactory{
public Operation CreateOperation();
}
//具体工厂的实现类
class AddFactory:IFactory{
public Operation CreateOperation(){
return new OperationAdd();
}
}
class SubFactory:IFactory{
public Operation CreateOperation(){
return new OperationSub();
}
}
.......
遵守了开闭原则,如果要增加新的“产品”,只需要新建对应的工厂类(实现工厂接口)和产品类(实现产品接口)即可。
抽象工厂
建造者模式
class Product{
IList<String> parts=new List<String>();
public void Add(String part){
parts.Add(part);
}
}
class Builder{
public void BuildPartA();
public void BuildPartB();
public Product GetResult();
}
class ConcreteBuilder1:Builder{
private Product product=new Product();
@Override
public void BuildPartA(){
product.Add("partA");
}
@Override
public void BuildPartB(){
product.Add("partB");
}
@Override
public Product GetResult(){
return product;
}
}
//Builder的另一种实现
class ConcreteBuilder2:Builder{
........
}
class Director{
public void Construct(Builder builder){
builder.BuildPartA();
builder.BuildPartB();
}
}
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
参考:https://www.yuque.com/docs/share/b0f70f34-1a7e-41bb-9222-c46382a65bb3?# 《浅拷贝和深拷贝》
单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点。
参考:https://www.yuque.com/docs/share/c5bfe116-8ea2-4d35-9d34-9bdb09cece59?# 《单例的七种写法》