随笔分类 -  设计模式

摘要:代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制这个对象的访问。即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即拓展目标对象。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有三种不同的形式:静态代理、动态代理(又 阅读全文
posted @ 2020-03-24 01:00 护花使者 阅读(122) 评论(0) 推荐(0) 编辑
摘要:基本介绍: 1)享元模式:运用共享技术有效地支持大量细粒度的对象 2)常用于系统底层开发,,解决系统性能问题。如数据库的连接池。 3)能够解决重复对象在内存中的浪费问题。当系统中有大量的相似对象的时候,需要缓冲池。不需要总是创建新对象,可以从缓冲池里拿。可以降低系统内存,同时提高效率。 4)享元模式 阅读全文
posted @ 2020-03-17 00:20 护花使者 阅读(140) 评论(0) 推荐(0) 编辑
摘要:外观模式介绍:外观模式(Facade),也叫"过程模式", 外观模式为子系统中的一组接口提供一个一致的界面,此模式定了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式通过定义一个一致的接口,用以屏蔽内部子雄他那个的细节,使得调用端只需要跟这个接口发生调用,而不需关心这个子系统的内部细节。 阅读全文
posted @ 2020-03-15 00:23 护花使者 阅读(131) 评论(0) 推荐(0) 编辑
摘要:组合模式的基本介绍: 又叫部分整体模式。创建了对象组的树形结构,将对象组合成树形结构以表示"整体-部分"的层次关系。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。组合模式使得用户对单个对象和组合对象的访问具有一致性。即:组合能让客户以一致的方式处理个别对象以及组合对象。 组合模式主要解决 阅读全文
posted @ 2020-03-13 00:05 护花使者 阅读(186) 评论(0) 推荐(0) 编辑
摘要:装饰者模式介绍:动态的将新功能附加到对象上。在对象的功能拓展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(opc原则)。 装饰者模式类似于打包一个快递。 主体(Component):陶瓷、衣服。 包装(Decorator):报纸填充、塑料泡沫、纸板、木板。 这边的Component主体一般是抽 阅读全文
posted @ 2020-03-10 00:31 护花使者 阅读(138) 评论(0) 推荐(0) 编辑
摘要:适配器模式介绍: 1、适配器模式是将某个类的接口转化成客户端期望的另一个接口表示,主要目的是为了兼容性,让原本因接口原因不匹配不能一起工作的两个类可以协同工作。也叫包装器。 2、适配器模式属于结构性模式。 3、主要分类:类适配器模式,对象适配器模式,接口适配器模式。 适配器模式最大的作用就是将原本不 阅读全文
posted @ 2020-03-08 01:35 护花使者 阅读(170) 评论(0) 推荐(0) 编辑
摘要:背景:需要建造一个房子,建造的房子过程有打地基、砌墙、封顶。建造的类型有普通的房子、高楼。 思路:需要有一个抽象类,里面有建造房子过程的三个方法,然后具体类继承这个抽象类。 关系图如下: 代码实现如下: AbstractHouse.java public abstract class Abstrac 阅读全文
posted @ 2020-03-07 17:21 护花使者 阅读(110) 评论(0) 推荐(0) 编辑
摘要:背景:如果有一只狗,Jim, 现在需要创建5只,跟Jim一样的狗(属性一样的),按常规的做法如下: Dog: public class Dog { private String name; private int age; public Dog(String name, int age) { thi 阅读全文
posted @ 2020-03-06 23:22 护花使者 阅读(118) 评论(0) 推荐(0) 编辑
摘要:1.创建型模式 创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关系创建对象过程中的逻辑。 社会化的分工越 阅读全文
posted @ 2020-03-01 00:19 护花使者 阅读(103) 评论(0) 推荐(0) 编辑
摘要:概念: 迪米特法则(最少知道原则)告诉我们,类应该只与直接的朋友(成员变量、方法参数、方法返回值)通信, 陌生的类最好不要以局部变量的形式出现在类内部。 迪米特法则的目的是为了降低类之间的耦合,但是不是完全消除依赖。 阅读全文
posted @ 2020-02-29 17:55 护花使者 阅读(104) 评论(0) 推荐(0) 编辑
摘要:面向对象编程中存在的问题: 1)在子类层面上,因为子类可以对父类已经实现的方法进行任意的修改。可能对继承体系造成破坏。 2)在父类层面上,如果父类修改了,所有涉及到子类的功能都有可能产生故障。 概念: 里氏替换原则并不是不让我们使用继承,所有引用基类的地方必须能透明地使用其子类的对象,在子类中尽量不 阅读全文
posted @ 2020-02-29 13:01 护花使者 阅读(140) 评论(0) 推荐(0) 编辑
摘要:基本概念: 抽象表示的是接口、抽象类。细节就是具体的实现类。接口或抽象类的价值在于指定规范。 一个反面例子: public class DependencyInversion { public static void main(String[] args) { People people = new 阅读全文
posted @ 2020-02-28 22:47 护花使者 阅读(182) 评论(0) 推荐(0) 编辑
摘要:定义: 以上截图的uml图已添加注释,代码实现如下: public class Segregation { public static void main(String[] args) { A a = new A(); B b = new B(); C c = new C(); D d = new 阅读全文
posted @ 2020-02-27 21:54 护花使者 阅读(328) 评论(0) 推荐(0) 编辑
摘要:demo(反面教程): 摩托车、汽车时没有问题的,但是飞机在公里运行,即不合理。 因为类中的run方法违反了单一职责原则。 改进: 以上其实是方法级别上遵守单一职责原则。另外一种方法是建多个类,在类上实行单一职责原则,其中每个类的run方法不一样, 单一职责原则其实是指类上面的,但是这样改动的时候开 阅读全文
posted @ 2020-02-22 01:11 护花使者 阅读(133) 评论(0) 推荐(0) 编辑
摘要:很多人会觉得矛盾,拓展开放--修改关闭? 如果不能修改如何拓展呢。但是其实是提供方对扩展开放。使用方对修改关闭。 这样讲比较抽象: 例子: public class Ocp { public static void main(String[] args) { AnimalAct.speak(new 阅读全文
posted @ 2020-02-16 01:13 护花使者 阅读(145) 评论(0) 推荐(0) 编辑
摘要:一、泛化(Generanization) 图: 泛化简单的说就是继承关系,在java中就是extend。表示一般与特殊的关系。如鸭子是鸟的一种,即有鸭子的特性也有鸟的共性。用带空心的三角箭头的实线指向父类。 二、接口与实现 图: 这种关系其实就是java里面的implements,是类与接口的关系。 阅读全文
posted @ 2020-02-15 12:52 护花使者 阅读(319) 评论(0) 推荐(0) 编辑
摘要:类例子: 以上是一个类图: 1、主要分成三个部分,从上到下依次是类名、类属性、类方法。 2、+表示的是public,-表示的是private,#表示的protected,~表示的是package。 3、下划线表示的是static。 4、属性方框中,' + public xxx: int = 1 '表 阅读全文
posted @ 2020-02-14 21:54 护花使者 阅读(358) 评论(0) 推荐(0) 编辑
摘要:看来韩顺平老师授课视频,觉得例子讲的较为形象,于是坐下总结,目的是怕自己忘记。 背景:比如现在有披萨的一个项目: 披萨的种类非常多(LondonPizza伦敦的, BeijingPizza北京的), 不同类别披萨下面还有不同口味(奶酪的,胡椒的)的披萨。披萨的制作过程有比如prepare, bake 阅读全文
posted @ 2019-03-15 23:47 护花使者 阅读(206) 评论(0) 推荐(0) 编辑
摘要:枚举+反射实现简单工厂模式(又叫静态工厂模式) 定义接口: public interface IAnimal { public void eat(); } 具体类: public class Pig implements IAnimal { public void eat() { System.ou 阅读全文
posted @ 2019-03-14 23:48 护花使者 阅读(389) 评论(0) 推荐(0) 编辑
摘要:1、单一职责原则——对于一个类而言,应该仅有一个引起它变化的原因。尽量对某一职责定义一个特定的类。2、开闭原则——软件中的对象应该对修改关闭,对扩展开发。通过继承来实现软件升级,因为修改原有类可能造成原有模块的其他问题。3、里氏替换原则——所有引用基类的地方必须能够透明使用子类对象替换。反之则不可以 阅读全文
posted @ 2019-03-10 11:59 护花使者 阅读(125) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示