软件的可维护性与可复用性
软件的可维护性与可复用性软件的可维护性与可复用性 模式模式 模式,即 Pattern。事实上确实是解决某一类问题的方法论。把解决某类问题的方法总结归 纳到理论高度,那确实是模式。Alexander 给出的经典定义是每个模式都描述了一个在我们 的环境中不断显现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你能够许多次 地使用那些已有的解决方案, 无需再重复相同的工作。 模式有不同的领域, 建筑领域有建筑模式, 软件设计领域也有设计模式。当一个领域逐步成熟的时候,自然会显现专门多模式。 设计模式和面向对象的设计模式设计模式和面向对象的设计模式 设计模式〔Design pattern〕是一套被反复使用、多数人知晓的、通过分类编目的、代码 设计体会的总结。使用设计模式是为了可重用代码、让代码更容易被他人明白得、保证代码可靠 性。设计模式最初来源于建筑学。GOF〔〝四人帮〞,指 Gamma, Helm, Johnson namespace DesignPatterns.Creational { // 测试程序 class MainApp { public static void Main { // 抽象工厂 1 AbstractFactory factory1 new ConcreteFactory1; Client c1 new Clientfactory1; c1.Run; // 抽象工厂 2 AbstractFactory factory2 new ConcreteFactory2; Client c2 new Clientfactory2; c2.Run; // 等候用户输入 Console.Read; } } // 抽象工厂 abstract class AbstractFactory { public abstract AbstractProductA CreateProductA; public abstract AbstractProductB CreateProductB; } // 具体工厂 1 class ConcreteFactory1 AbstractFactory { public override AbstractProductA CreateProductA { return new ProductA1; } public override AbstractProductB CreateProductB { return new ProductB1; } } // 具体工厂 2 class ConcreteFactory2 AbstractFactory { public override AbstractProductA CreateProductA { return new ProductA2; } public override AbstractProductB CreateProductB { return new ProductB2; } } // 抽象产品 A,产品族中一个成员 abstract class AbstractProductA { } // 抽象产品 B,产品族中一个成员 abstract class AbstractProductB { public abstract void InteractAbstractProductA a; } // 具体产品 A1 class ProductA1 AbstractProductA { } // 具体产品 B1 class ProductB1 AbstractProductB { public override void InteractAbstractProductA a { Console.WriteLinethis.GetType.Name “ interacts with “ a.GetType.Name; } } // 具体产品 A2 class ProductA2 AbstractProductA { } // 具体产品 B2 class ProductB2 AbstractProductB { public override void InteractAbstractProductA a { Console.WriteLinethis.GetType.Name “ interacts with “ a.GetType.Name; } } // 客户端,使用环境 class Client { private AbstractProductA AbstractProductA; private AbstractProductB AbstractProductB; // 构造,注意通过构造传入抽象工厂 public ClientAbstractFactory factory { AbstractProductB factory.CreateProductB; AbstractProductA factory.CreateProductA; } public void Run { AbstractProductB.InteractAbstractProductA; } } } 输出结果为 ProductB1 interacts with ProductA1 ProductB2 interacts with ProductA2 生活中的实例 那个生活中的实例代码演示了一个电脑游戏, 在游戏中建立不同的动物世界会使用不同的工 厂。尽管创建动物的大陆工厂是不同的,然而动物之间的相互关系保持不变。 Real world code using Abstract Factory in C using System; namespace DesignPatterns.Creational.AbstractFactory.RealWorld { class MainApp { public static void Main { // 创建非洲大陆 ContinentFactory africa new AfricaFactory; AnimalWorld world new AnimalWorldafrica; world.RunFoodChain; // 创建美洲大陆 ContinentFactory america new AmericaFactory; world new AnimalWorldamerica; world.RunFoodChain; // 等待用户输入 Console.ReadKey; } } // 抽象工厂 abstract class ContinentFactory { // 创建食草动物 public abstract Herbivore CreateHerbivore; // 创建食肉动物 public ab