设计模式

  • 什么是设计模式

软件工程中,设计模式是对软件设计中普遍存在的各种问题,所提出的 解决方案

  • 设计模式原则
  1. 开闭原则——对扩展开放,对修改封闭
  2. 里氏代换原则——任何基类出现的地方,子类都可以出现。开闭原则的补充。
  3. 依赖倒转原则——针对接口编程,高层模块不依赖底层模块,二者都依赖抽象而不依赖具体。
  4. 接口隔离原则——使用多个隔离的接口,不应使用单个庞大的接口。
  5. 单一职责原则——类的职责要单一。
  6. 迪特米原则——也称最少知道原则,一个实体与其他实体的相互作用越少越好,功能模块相对独立。
  7. 合成复用原则——多使用 组合/聚合 的方式,尽量少使用甚至不使用继承关系。
  • 工厂模式的理解

      在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

      打个比方,富士康工厂的苹果手机生产车间可以生产iPhone8和iPhone8Plus,苹果公司给出指令说要iPhone8,那工厂就生产iPhone8;给出指令说要iPhone8Plus,那工厂就生产iPhone8Plus。苹果公司的客户端,工厂是接口,生产车间是父类,生产iPhone8和iPhone8Plus的两条流水线是子类,也是具体的实现类。客户端调用接口的方法,接口里返回子类的方法。

  • 工厂模式通常分为:
  1. 普通工厂模式
  2. 多个工厂方法模式
  3. 静态工厂方法模式

大多数情况下,选用工厂方法模式,因为方法置为静态的,不需要创建实例,不需要实例化工厂类 ,可以直接调用。

  • 抽象工厂模式

抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。抽象工厂是“工厂的工厂”。

 

  • 工厂方法模式、抽象工厂模式区别

产品等级结构:比如一个抽象类是食物,其子类有苹果、牛奶等,则抽象食物与具体食物名称之间构成了一个产品等级结构。食物是抽象的父类,而具体的食物名称是其子类。

产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。如 A厨房 生产苹果、刀子,苹果属于食物产品等级结构中,而刀子则属于餐具产品等级结构中。而 B厨房 可能生成另一组产品,如牛奶、杯子。

因此工厂方法模式、抽象工厂模式最大的区别在于:

工厂方法模式:针对 一个产品等级结构。

抽象工厂模式:针对 多个产品等级结构。

 

  • 装饰者模式

装饰者模式(Decorator Pattern,有的也用 Wrapper Pattern)就是动态地把职责附加到已有对象上去,实现功能扩展。

Java IO 类中有一个经典的装饰者模式应用, BufferedReader 装饰了 InputStreamReader.

 

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

 

  • 观察者模式

观察者模式(Observer Pattern)就是一种 “发布者-订阅者” 的模式。也被称为 “模型-视图”模式、“源-监听者”模式。是由一个目标对象来管理所有依赖与它的观察者对象,并且当这个目标对象自身发生改变时,会主动向它的观察者们发出通知。

 

  • 单例模式

一个类能返回对象的一个引用(永远是同一个)和一个获得该唯一实例的静态方法(必须是静态的)。通过单例模式,可以保证系统中只有一个实例,从而在某些特定的场合下达到节约或者控制系统资源的目的。

  • 静态内部类实现单例模式
// 静态内部类

public class  Human{

    private static class HumanInnerClass{     //HumanInnerClass 是私有的,只有getHuman()才能访问实例对象

        private static final  Human human = new Human();

    }

    private Human();



    public static  Human getHuman(){    //只有调用getHuman()才会创建Human的实例对象

        return HumanInnerClass.human;

    }

}
  • 枚举实现单例模式

创建枚举默认是线程安全的,并且可以防止反序列化带来的问题。( 自由序列化,线程安全,保证单例)

public enum Human{

    INSTANCE;

    // 自定义的其他任意方法

    public void otherMethod() { }

}

可以通过Human.INSTANCE来访问实例对象。《Effective Java》里有句话:单元素的枚举类型已经成为实现Singleton的最佳方法。

转载于:https://www.cnblogs.com/lingqinyu/p/8877767.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
显示文件新增加的键字: 显示文件增加了下列键字: CSRINPONLY(光标移至仅输入位置) HLPSHELF(帮助书架) MOUBTN(鼠标按键) PSHBTNCHC(按钮开关字段选择) PSHBTNFLD(按钮开关字段) SFLCHCCTL(子文件选择控制) SFLMLTCHC(子文件多项选择表) SFLRTNSEL(子文件返回选择) SFLSCROLL(子文件上卷) SFLSNGCHC(子文件单项选择表) VALNUM(有效数字) WDWTITLE(窗口标题) WRDWRAP(字卷) 这些键字在第三章“显示文件”按字母顺序来讲述。 加到DBCS设备中一些新的显示文件键字(具有调用日语DDS的能力): 下面键字加到显示文件中: GRDATR(坐标属性) GRDBOX(坐标框) GRDCLR(坐标清除) GRDLIN(坐标行) GRDRCD(坐标记录) 这些键字在附录E中以字母顺序来讲述。 以下新的键字加到系统内部通讯功能文件中: PRPCMT(准备落实) RCVROLLB(接收返回响应指示器) RCVTKCMT(接收取落实响应指示器) TNSSYNLVL(转换同步级) 这些键字在第五章“系统内部通讯功能文件”中以字母顺序讲述。 下面键字加到DBCS文件中: CNTFLD(续行项字段) 这个键字在附录E中讲述。 以下是显示文件中修改过的键字: EDTWRD(编辑字) MLTCHCFLD(多项选择字段) MNUBAR(菜单项) PULLDOWN(下拉菜单) RTNCSRLOC(返回光标位置) SFLEND(子文件结束) SFLRCDNBR(子文件记录号) SFLSIZ(子文件大小) SNGCHCFLD(单项选择字段) WINDOW(窗口) 这些键字在第三章“显示文件”中以字母顺序讲述。 以下是打印文件修改过的键字: GDF(图形数据文件) OVERLAY(复盖) PAGSEG(页段) 这些键字在第四章“打印文件”中以字母顺序讲述。 系统内部通讯功能文件修改过的键字: SYNLVL(同步级) 这个键字在第五章“系统内部通讯功能文件”中讲述。 需在打印设备描述中有AFP(*YES)的键字: 对于V3R1,这种先进功能的打印系统(AFP)是做为OS/400中称作打印服务设备/400(PSF/400)的独立部分定购的。为了能够打印特殊值的某些键字所规定的值,需要PSF/400。这些键字在4.2中讲述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值