常用的设计模式的学习与理解心得
##1,策略模式
优点:利用接口的多态,将接口作为参数传入,可以实现多种对象的传入。
缺点:需要有实现接口的多个策略类
##2,代理模式
优点:可以生成多种功能的对象,比单纯只采用继承的方法更加的简单灵活
缺点:增加了许多子类,如果过度使用会使得程序变得很复杂
实例代码:
public class Food { private String food_name; public Food() { } public Food(String food_name) { this.food_name = food_name; } public String make() { return food_name; };
}//面包类
public class Bread extends Food { private Food basic_food; public Bread(Food basic_food) { this.basic_food = basic_food; } public String make() { return basic_food.make()+"+面包"; }
}
//奶油类
public class Cream extends Food { private Food basic_food; public Cream(Food basic_food) { this.basic_food = basic_food; } public String make() { return basic_food.make()+"+奶油"; }
}
//蔬菜类
public class Vegetable extends Food {private Food basic_food; public Vegetable(Food basic_food) { this.basic_food = basic_food; } public String make() { return basic_food.make()+"+蔬菜"; }
}
public class Test { public static void main(String[] args) { Food food = new Bread(new Vegetable(new Cream(new Food("香肠")))); System.out.println(food.make()); }
}
##代理模式
1.可以做到在不修改目标对象的功能前提下,对目标功能扩展.
2.缺点:
因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.
如何解决静态代理中的缺点呢?答案是可以使用动态代理方式
/*** 接口*/
public interface IUserDao {void save();
}
/*** 接口实现* 目标对象*/
public class UserDao implements IUserDao {public void save() {System.out.println("----已经保存数据!----");}
}
/*** 代理对象,静态代理*/
public class UserDaoProxy implements IUserDao{//接收保存目标对象private IUserDao target;public UserDaoProxy(IUserDao target){this.target=target;}public void save() {System.out.println("开始事务...");target.save();//执行目标对象的方法System.out.println("提交事务...");}
}/*** 测试类*/
public class App {public static void main(String[] args) {//目标对象UserDao target = new UserDao();//代理对象,把目标对象传给代理对象,建立代理关系UserDaoProxy proxy = new UserDaoProxy(target);proxy.save();//执行的是代理的方法}
}
1.简单工厂模式:将业务逻辑部分和界面逻辑部分分离开来,降低了业务逻辑部分和界面逻辑部分的耦合度,符合面向对象的迪米特法则。
2.工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了子类。
3.抽象工厂模式;提供一个创建一系列相关或者相互依赖的对象的接口,而无需指定他们具体的类。
4.职责链设计模式(chain of responsibility):使多个对象都有处理请求的机会,从而避免了请求的发送者和接受者之间的耦合关系,将所有的处理对象连成一条链,
并沿着这条链传递请求,直到有一个对象能够处理它为止。
5.单身设计模式:(singleton);保证一个类仅仅有一个实例,并提供一个访问他的全局访问点,通常我们可以让一个全局变量使得一个对象被访问,但他不能防止你
实例化多个对象,一个最好的方法就是,让类自身保护它唯一的实例,这个类可以保证它没有其他的实例被创建,并且它可以提供一个访问该实例的方法。
6.适配器设计模式:(Adapter):讲一个;类的接口转化为客户希望的另一个接口,Adapter模式使得原来接口不兼容而不能一起工作的那些类可以一起工作了。
7.装饰设计模式:(Decorator):动态地给一个对象添加一些额外的职责。即增加功能来说,装饰模式比生成子类更为灵活。
8.代理模式:(Proxy):为其他对象提供一种代理以达到控制这个对象的访问。
9.观察者设计模式:又称发布–订阅模式,定义了一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有的
观察者对象,使他们能够自动的进行更新。
10.状态设计模式:当一个对象的内在状态发生改变时允许改变其行为,这个对象看起来像是改变了类,状态模式主要解决的是当控制一个对象转换的条件表达式过于复杂的
情况。把状态的判断逻辑转移到表示不同状态的的一系列的类中,可以把复杂的逻辑简化。好处是将特定状态的相关行为局部化,且将不同状态的行为分割开来。
11.命令设计模式:命令设计模式的作用是将一个请求封装成一个对象,从而使我们可以用不同的请求对象进行参数化,对请求排队或者是请求记录日志,以及支持科撤销的
操作,命令模式将调用操作的请求对象与知道如何实现改操作的接受对象解耦,
12.模板设计模式:定义一个算法骨架,而且将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义算法的特定步骤。
13桥接设计模式;将抽象部分与它的现实部分想分离,使它们可以独立的变化,桥接设计模式可以避免“类爆炸”的情况
14.策略设计模式:定义了一个算法家庭,分别把他们都封装起来,让他们之间可以相互替换,这些算法的替换变化不会影响到使用算法的客户。
15组合设计模式;将对象组合成树的结构以表示“部分–与整体”的的层次结构,组合模式使得单个用户对单个对象的使用具有一致性。
16.原型设计模式:用原型的实例指定创建类的总类,并且通过拷贝这个原型来创建的新的对象。
常用的设计模式的学习与理解心得相关推荐
- 关于基于stm32的0.96寸oled显示屏的学习理解心得。
关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...
- Java常用的设计模式总结
前言 java设计模式有23种,他们分别是: 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式. 结构型模式:适配器模式.桥接模式.装饰器模式.组合模式.外观模式.享元模式.代理模式 ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- 学习计算机在化学中的应用的心得,学习计算机多媒体技术心得体会
随着科学技术的发展,特别是计算机技术的推广和普及,多媒体技术在课堂教学中得到了广泛的应用,体会. 一.中学教师特别是青年教师要善于学习.乐于学习计算机多媒体技术 计算机多媒体技术作为教学的一项辅助手段 ...
- 【Java 常用的设计模式】
目录 前言 一.设计原则 1.1 开闭原则 1.2 单一职责原则 1.3 依赖倒置原则 1.4 接口分离原则 1.5 迪米特法则 1.6 里氏替换原则 二.设计模式 2.1 单例模式 2.1.1 饿汉 ...
- 《游戏设计模式》学习笔记
** <游戏设计模式>学习笔记 ** 原作中文版传送门:<游戏设计模式> 原书作者:Bob Nystrom 阅读背景:最近担任了主程(惭愧,整个项目组就我一个人,2333),在 ...
- 说一点学习python的心得
本文非技术型文章,仅是一些学习python的心得.感悟,希望能帮到正在学习python的小白和小小白们. 选择合适的IDE 在这里不去争论哪一款IDE最好,只想对刚开始学习Python的同学说,请选择 ...
- Git 个人学习笔记及心得
作为程序员如果你还不知道 Git 和 GitHub,说不过去吧,赶紧来学习一波. 一.认识GitHub Git 是个版本控制系统,说明白点就是进行代码的各种管理,比如你写错代码进行回滚啊.追寻 Bug ...
最新文章
- sudo 密码超时时间
- python引入同目录文件_Python的文件目录操作
- linux进入文件夹命令,如何在 Linux 中不使用 CD 命令进入目录/文件夹?
- python 元组 列表 字典区别_python编程:常用的数据结构之字典的方法总结,和列表和元组区别...
- 给.net初学者的一些建议(共勉之)[转载]
- Kafka的架构设计
- jsp篇 之 指令元素和动作元素
- keras中的loss、optimizer、metrics
- 熟悉相关电路,控制I/O口,且配置相关参数,LED,光敏,74LS164数码管
- 如何在Mac电脑上自定义Spotlight的搜索结果?
- securiteCRT中退出全屏
- 电子统计台账:垂直流水账格式数据的导入
- 指纹机和计算机无法连接,考勤机怎么连接到电脑?考勤机连接电脑之后操作指南!...
- 螺栓预紧力与拧紧力矩的计算方法
- 计算机一级怎么查错题,独家秘笈计算机一级错题解释.ppt
- python爬今日头条app_今日头条app数据爬虫demo
- R语言sparse.model.matrix函数报错
- docker学习 --Compose 容器编排,常用命令等.集成spring。mysql。redis
- 【Unity学习历程之一】给Visual Studio中的C#脚本编辑添加自动补全
- [bzoj3073]Journeys
热门文章
- 海龟 (turtle) 画图实战任务(五 ):输出逐渐变大的文字及根据用户输入的边数绘制多边形
- HBuilderX 连接真机或者模拟器调试后不能运行ADB.exe的解决
- matlab对图片进行放大和缩小
- Pycharm 激活码网址
- 惠而浦空调遥控协议分析及使用Arduino遥控空调
- 手机经常发热怎么回事?减少这些操作,手机温度轻松降下来
- 在网页中嵌入mp3的代码
- [概念]TF学习笔记day02+张量(常量+变量+占位符)
- 苹果手机升级后怎么恢复旧版本_手机联系人不见了怎么恢复?苹果手机恢复技巧大全!...
- 一文了解获得 Zebec Labs 投资的 Coral Finance,空投计划或在不久推出