迭代器模式
提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
package com.ruishenh.designPatter.action.iterator;
import java.util.ArrayList;
import java.util.List;
public class IteratorClient {
public static void main(String[] args) {
ICollection<Module> list=new Collection<Module>();
list.add(new Module(1,"h1"));
list.add(new Module(2,"h2"));
list.add(new Module(3,"h3"));
Iterator<Module> moduls=list.iterator();
while(moduls.hasNext()){
Module m=moduls.next();
System.out.println(m.toString());
}
}
}
//迭代器
interface Iterator<T>{
boolean hasNext();
T next();
}
//组合器
interface IAssembler<T>{
boolean add(T t);
boolean remove(T t);
}
//容器角色
interface ICollection<T> extends IAssembler<T>{
Iterator<T> iterator();
}
//具体容器角色
class Collection<T> implements ICollection<T>{
private List<T> list;
@Override
public Iterator<T> iterator() {
return new ContretelIterator<T>(this.list);
}
@Override
public boolean add(T t) {
if (list==null) {
list=new ArrayList<T>();
}
return list.add(t);
}
@Override
public boolean remove(T t) {
return list.remove(t);
}
}
//具体迭代器角色
class ContretelIterator<T> implements Iterator<T>{
private transient List<T> list;
public ContretelIterator(List<T> list){
this.list=list;
}
int cursor = 0;
@Override
public boolean hasNext() {
return cursor!=list.size();
}
@Override
public T next() {
return list.get(cursor++);
}
}
class Module{
public Module(int id,String name){this.id=id;this.name=name;}
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "id:"+id+",name:"+name;
}
}
迭代器模式核心任务把数据实体的操作和生成分离开来,容器负责产生对应的数据,迭代器负责把集合返回用户来一个个操作。
观察者模式
定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。
package com.ruishenh.designPatter.action.observer;
import java.util.ArrayList;
import java.util.List;
public class ObserverClient {
public static void main(String[] args) {
//初始化容器,安装核心程序
Container<IDependent<ICore>,ICore> container=new Container<IDependent<ICore>, ICore>(new Wash());
//容器注册设备1
App1 a1=new App1();
container.add(a1);
//容器注册设备1
App2 a2=new App2();
container.add(a2);
//设备工作
a1.function();
a2.function();
//更新核心程序
container.upgrade(new Clear());
//设备工作
a1.function();
a2.function();
}
}
//约定更新接口
interface IDependent<E>{
void update(E e,String msg);
void setCore(E e,String msg);
}
//核心包功能包
interface ICore{
void function();
}
class Wash implements ICore{
@Override
public void function() {
System.out.println("洗衣服......");
}
}
class Clear implements ICore{
@Override
public void function() {
System.out.println("清除垃圾......");
}
}
//管理注册容器
class Container<T extends IDependent<E>, E>{
public Container(E e){
this.core=e;
System.out.println("初始化核心程序....");
}
E core;
List<T> list;
String msg="更新了最新程序,由1.0更新到1.1";
void upgrade(E core){
this.core=core;
notfiy();
}
void add(T t){
if(list==null)list=new ArrayList<T>();
list.add(t);
t.setCore(core, "初始化程序,当期程序1.0版本");
}
void remove(T t){
if(list==null)return;
list.remove(t);
}
void notfiy(){
for (T t:list) {
t.update(core,msg);
}
}
}
class App1 implements IDependent<ICore>{
ICore core;
@Override
public void setCore(ICore e, String msg) {
this.core=e;
System.out.print("我是App1程序:");
System.out.println(msg);
}
@Override
public void update(ICore e,String msg) {
System.out.print("我是App1程序:");
System.out.println(msg);
this.core=e;
}
void function(){core.function();}
}
class App2 implements IDependent<ICore>{
ICore core;
@Override
public void setCore(ICore e, String msg) {
this.core=e;
System.out.print("我是App2程序:");
System.out.println(msg);
}
@Override
public void update(ICore e,String msg) {
System.out.print("我是App2程序:");
System.out.println(msg);
this.core=e;
}
void function(){core.function();}
}
观察者模式的核心任务个人理解是主要是对依赖主题的变更提高更好地维护性。
当被依赖的东西发生了改变,依赖它的其他对象能及时的更新变更
模板方法
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。
package com.ruishenh.designPatter.action.templateMethod;
public class TemplateMethodClient {
public static void main(String[] args) {
Shop shop = new IceCreamShop();
shop.buy();
}
}
abstract class Shop {
// 买东西
void buy() {
pay();
take();
}
public abstract void pay();
public abstract void take();
}
class IceCreamShop extends Shop {
@Override
public void pay() {
System.out.println("付冰激凌的钱");
}
@Override
public void take() {
System.out.println("服务员给了我冰激凌");
}
}
模板方法的核心就是把要做的一件事的框架给定好了,有些具体操作留给它的子类去完成。
分享到:
相关推荐
c++设计模式-行为型模式-解释器模式;qt工程;c++简单源码; 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式...
行为型模式(Behavioral Patterns)是设计模式的一种,关注对象行为功能上的抽象,从而提升对象在行为功能上的可拓展性,能以最少的代码变动完成功能的增减。 在设计模式中,行为型模式主要包括以下几种: 1. 迭代...
设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
然后,资源对23种设计模式进行了分类和总结,包括创建型模式、结构型模式和行为型模式。 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。共有5种,...
设计模式分为三大类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如代理、装饰器、适配器)和行为型模式(如观察者、策略、命令)。这些模式都是在特定上下文中解决设计问题的模板,它们可以提高代码的...
设计模式是经验丰富的开发者们在解决重复出现的问题时总结出来的一种通用解决方案。它们不是具体的代码或库,而是对如何设计可扩展、可维护和灵活的软件结构的一种描述。设计模式通常分为三类:创建型、结构型和行为...
Java设计模式是软件工程中的一种重要思想,它总结了在解决特定问题时,程序员们反复使用的一些最佳实践和解决方案。这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...
设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的经验和方法,为软件设计提供了一种标准化的解决方案。本书旨在帮助C#开发者更好地理解和运用这些模式,提升代码质量和可维护性。 设计模式...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中遇到的常见问题。这个压缩包文件名为“23种设计模式示例源码”,暗示其中包含了解决23种经典设计模式的具体实现代码,这对于初学者或者希望深入理解...
2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...
设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的可重用解决方案。华工(华南理工大学)的这门课程“设计模式”深入浅出地讲解了这一主题,旨在帮助开发者提高代码质量和可维护性。下面将详细...
设计模式(创建型、结构型、行为型) 设计模式是软件设计中的一种重要概念,它们可以帮助开发者更好地设计和实现软件系统。根据GoF(Gang of Four)的分类,设计模式可以分为三大类:创建型、结构型和行为型。 ...