设计模式--java

上传人:第*** 文档编号:64093712 上传时间:2018-12-26 格式:DOCX 页数:25 大小:90.82KB
返回 下载 相关 举报
设计模式--java_第1页
第1页 / 共25页
设计模式--java_第2页
第2页 / 共25页
设计模式--java_第3页
第3页 / 共25页
设计模式--java_第4页
第4页 / 共25页
设计模式--java_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《设计模式--java》由会员分享,可在线阅读,更多相关《设计模式--java(25页珍藏版)》请在金锄头文库上搜索。

1、JAVA的设计模式一、设计模式的六大原则:1、单一职责原则不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。2、里氏替换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原

2、则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。历史替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。3、依赖倒转原则(Dependence Inversion Principle)这个是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。4、接口隔离原则(Interface Segregation Principle)这个原则的意思是:每个接口中不存在子类用不到却必须实现

3、的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。5、迪米特法则(最少知道原则)就是说:一个类对自己依赖的类知道的越少越好。也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。6、合成复用原则原则

4、是尽量首先使用合成/聚合的方式,而不是使用继承。二、常见模式介绍1.创建模式工厂方法模式适用场景:首先,作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。其次,工厂模式是一种典型的解耦模式,迪米特法则在工厂模式中表现的尤为明显。假如调用者自己组装产品需要增加依赖关系时,可以考虑使用工厂模式。将会大大降低对象之间的耦合度。再次,由于工厂模式是依靠抽象架构的,它把实例化产品的任务交由实现类完成

5、,扩展性比较好。也就是说,当需要系统有比较好的扩展性时,可以考虑工厂模式,不同的产品用不同的实现工厂来组装。流程:先定义一个创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。代码示例:interface IProduct public void productMethod();class Product implements IProduct public void productMethod() System.out.println(产品);interface IFactory public IProduct createProduct();class Fact

6、ory implements IFactory public IProduct createProduct() return new Product();public class Client public static void main(String args) IFactory factory = new Factory();IProduct prodect = factory.createProduct();prodect.productMethod();由上我们可以看出:我们本质的目的创建一个类(Product),但是这个类是复杂可变的,通过工厂模式,将产品的实例化封装起来,使得调用

7、者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品,所以我们用一个工厂的方法createProduct()来实例化这个类(Product),创建这个类(Product)。抽象工厂模式适用场景:我们的工厂类一次只可以处理一类产品。那么如果我们想处理多类产品,简单工厂是满足不了的。必须要用抽象工厂设计模式。尤其涉及多人各自创建自己的类的时候而且相互的类之间有关联。流程:1、用抽象工厂生产抽象产品2、用实体工厂生产实体产品3、用抽象产品提供实体产品访问接口4、用实体产品实现自己的功能代码示例:定义抽象产品:/ 抽象产品Apublic abstract class Car public

8、 abstract void Run();抽象产品Bpublic interface IBus void Run();定义实体产品public class BMWCar:Car public override void Run() Console.WriteLine(宝马轿车在行驶!); public class BenzCar:Car public override void Run() Console.WriteLine(奔驰轿车在行驶!); 定义抽象工厂public abstract class AbstractFactory public static AbstractFactory

9、CreateFactory(string strType) AbstractFactory factory = null; switch (strType) case BMW: factory = new BMWFactory(); break; case Benz: factory = new BenzFactory(); break; return factory; public abstract Car CreateCar(); public abstract IBus CreateBus(); 定义实体工厂 public class BMWFactory:AbstractFactory

10、 public override Car CreateCar() return new BMWCar(); public override IBus CreateBus() return new BMWBus(); 最后调用static void Main(string args) AbstractFactory factory = AbstractFactory.CreateFactory(Benz); Car car = factory.CreateCar(); car.Run(); IBus bus = factory.CreateBus(); bus.Run(); 由此看出:这因为我们

11、的用户只关心抽象工厂与抽象方法,即只需要自己所需的服务,这种模式不关心具体的实现方法,这种模式让我们只关心做好接口,调用接口的方法,来创建自己所需的类,来获得实体接口所提供的服务建造者模式适用场景:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 构建与表示分离,同构建不同表示流程:某一个类比较多,有许多的熟悉以及组件,这个时候需要一个构建者来 代码示例:public interface Builder void buildPartA(); void buildPartB(); void buildPartC(); Product getResult(); /具体建造工具

12、public class ConcreteBuilder implements Builder Part partA, partB, partC; public void buildPartA() /这里是具体如何构建partA的代码; public void buildPartB() /这里是具体如何构建partB的代码; public void buildPartC() /这里是具体如何构建partB的代码; public Product getResult() /返回最后组装成品结果; /建造者public class Director private Builder builder;

13、public Director( Builder builder ) this.builder = builder; public void construct() builder.buildPartA();builder.buildPartB();builder.buildPartC(); public interface Product public interface Part 下面是调用builder的方法:ConcreteBuilder builder = new ConcreteBuilder();Director director = new Director( builder ); director.construct(); Product product = builder.getResult();由此看出:建造者模式主要是使复杂对象的创建过程变得短小简单。单态模式适用场景:保证在JAVA应用程序中某些特定的类只有一个实例存在,节省内存及系统开销。只在第一次使用时进行创建。并且它由于限制了实例个数,有利于垃圾回收。流程:创建一个公共的单例的实体化方法。代码示例:public class Singleton private Singleton() / 通过

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号