开闭原则:扩展开放、修改关闭
使用:
创建过程复杂,希望对外隐藏这些细节:
- 连接池,线程池;固定数量
- 隐藏对外真实类型 class A classA_V2 classA-V3
- 对象创建会有很多参数来决定如何创建
eg: A * a = new A(…)
- 创建对象有复杂的依赖关系
class A创建依赖class B与C 但是 B与C没啥用
可以用到设计模式的地方:
1 一个对象的导出 可以是xm、json、txt
抽象出 IExport {Export(string content)}
https://blog.csdn.net/m0_37965018/article/details/103152585
https://www.cnblogs.com/binbinshan/p/14231970.html
拿泡茶为例,茶叶有好多种类,比如龙井、碧螺春、毛尖等
1.抽象 出茶
1.1 创建不同品牌的茶
2.抽象出 能创建茶的工厂
2.1 创建出不同品牌茶的工厂
最后
ITeaFacotry teaFactory = new 某个 品牌茶的工厂()
teaFactory.CreateTea();
简单工厂 --》工厂模式:
抽象工厂:
先定义抽象的产品
public abstract class Button
{
public abstract void Show();
}
public abstract class Checkbox
{
public abstract void Show();
}
具体的产品
public class WinBotton : Button
{
public override void Show()
{
Console.WriteLine("win btn click");
}
}
public class WinCheckbox : Checkbox
{
public override void Show()
{
Console.WriteLine("win checkbox click");
}
}
具体的产品
public class MacBotton : Button
{
public override void Show()
{
Console.WriteLine("Mac btn click");
}
}
public class MacCheckbox : Checkbox
{
public override void Show()
{
Console.WriteLine("Mac checkbox click");
}
}
定义抽象的工厂
public interface IGuiFactory
{
Button CreateBotton();
Checkbox CreateCheckbox();
}
具体的工厂
public class WinFactory : IGuiFactory
{
public Button CreateBotton()
{
return new WinBotton();
}
public Checkbox CreateCheckbox()
{
return new WinCheckbox();
}
}
具体的工厂
public class MacFactory : IGuiFactory
{
public Button CreateBotton()
{
return new MacBotton();
}
public Checkbox CreateCheckbox()
{
return new MacCheckbox();
}
}