设计模式总结
1.单例模式
单例模式的特点:
a:一个单例只有一个实例b:单例必须自己创建一个唯一的实例c:单例必须给其他对象提供这个实例单例的应用
a:每台计算机都有若干个打印机,但只能有一个pr 避免两个打印作业同时输出打印机b:一个具有主动编号的表可以多个用户使用,一个数据库中只有一个地方分配下一个主键编号,否则会出现主键重复public class Singleton
{ private static Singleton _instance = null; private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { _instance = new Singleton(); } return _instance; }}2.简单工厂 静态工厂方法 不属于23中设计模式
1.简而言之,就是将父类创建对象的职责转移给工厂来制造。2.基本过程1。场景 人去旅游并且搭乘交通工具人的类 并且创建一个旅游的方法创建一个交通工具的接口,自行车,车,分别继承接口创建一个工厂using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Configuration;namespace ConsoleApplication2
{ public class Factory { public static IRunable CreatVehicle() { string vehicleType = ConfigurationManager.AppSettings["VehicleType"]; IRunable vehicle = null; switch (vehicleType) { case "Car": vehicle = new Car(); break; case "Bike": vehicle = new Bike(); break; case "Plane": vehicle = new Plane(); break; } return vehicle; } } private IRunable vehicle=Factory.CreatVehicle();并且将值传给vehicleusing System;
using System.Collections.Generic; //人类using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2
{ public class Person { private IRunable vehicle=Factory.CreatVehicle(); public void Travel() { Console.WriteLine("人在旅行...."); vehicle.Run(); } }}} 2.抽象工厂模式1.符合开闭原则2.、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。3.抽象工厂隔离了具体类的生产4.多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 缺点:增加新产品结构复杂,需要修改抽象工厂和所有工厂类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Configuration;using System.Reflection;namespace ConsoleApplication2{ public abstract class AbstractFactory { public abstract IRunable CreatVehicle(); //具体的组分类 public abstract IShotable CreatWeapon(); public static AbstractFactory ChooseFactory() { string factoryName = ConfigurationManager.AppSettings["FactoryName"]; //基于反射技术根据类名动态创建该类的对象 return Assembly.GetExecutingAssembly().CreateInstance("ConsoleApplication2." + factoryName) as AbstractFactory; } }} using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2
{ public class Person { private AbstractFactory factory = AbstractFactory.ChooseFactory(); //调用抽象工厂 public void Travel() { IRunable vehicle = factory.CreatVehicle(); IShotable weapon = factory.CreatWeapon(); Console.WriteLine("人在旅行...."); vehicle.Run(); weapon.Shot(); } }}