当前位置: 首页 > news >正文

面向对象——设计模式(行为型)

在这里插入图片描述
责任链模式(Chain of Responsibility)
在这里插入图片描述
在这里插入图片描述

import com.sun.deploy.security.SelectableSecurityManager;import java.util.List;public class Pattern{public static void main(String[] args){Handler fudaoyuan1=new fudaoyuan();Handler yuanzhang1=new yuanzhang();Handler xiaozhang1=new xiaozhang();fudaoyuan1.setNext(yuanzhang1);yuanzhang1.setNext(xiaozhang1);fudaoyuan1.HandleRequest(9);}
}abstract class Handler{protected Handler next;public void setNext(Handler next){  //sussessor  后继者this.next=next;}public abstract void HandleRequest(int request);
}class fudaoyuan extends Handler{    //<=7 ConcreteHandler@Overridepublic void HandleRequest(int request){if(request<=7)System.out.println("辅导员审批通过");else if (next != null)next.HandleRequest(request);elseSystem.out.println("无法审批");}
}class yuanzhang extends Handler{    //<=15   ConcreteHandler@Overridepublic void HandleRequest(int request){if(request<=15)System.out.println("院长审批通过");else if(next != null)next.HandleRequest(request);elseSystem.out.println("无法审批");}
}class xiaozhang extends Handler{    //<=30   ConcreteHandler@Overridepublic void HandleRequest(int request){if(request<=30)System.out.println("校长审批通过");else if(next != null)next.HandleRequest(request);elseSystem.out.println("无法审批");}
}

命令模式(Command)
在这里插入图片描述
在这里插入图片描述

import com.sun.deploy.security.SelectableSecurityManager;import java.util.List;public class Pattern{public static void main(String[] args){TV tv=new TV();Command onCommand=new OnCommand(tv);Command offCommand=new OffCommand(tv);Yaokongqi yaokongqi=new Yaokongqi();yaokongqi.setCommand(onCommand);yaokongqi.call();System.out.println("这是一条分割线");yaokongqi.setCommand(offCommand);yaokongqi.call();}
}class Yaokongqi{    //Invoker   请求者private Command command;//设置请求者的请求命令public void setCommand(Command command){this.command=command;}//调用public void call(){command.Execute();}}interface Command{public void Execute();   //执行命令
}class OnCommand implements Command{   // 开机命令 ConcreteCommand  具体命令private TV tv;public OnCommand(TV tv){this.tv=tv;}@Overridepublic void Execute() {tv.OnAction();}
}class OffCommand implements Command{private TV tv;public OffCommand(TV tv){this.tv=tv;}@Overridepublic void Execute() {tv.OffAction();}
}class TV{   //Receiver  接受者public void OnAction(){System.out.println("开机啦");}public void OffAction(){System.out.println("关机啦");}}

解释器模式(Interpreter Pattern)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import com.sun.deploy.security.SelectableSecurityManager;import java.util.*;public class Pattern{public static void main(String[] args){Context context=new Context();context.check("A区的测试人员");context.check("C区的开发人员");context.check("D区的调试人员");}
}//Context 环境  上下文
class Context{private String[] regions={"A区","B区","C区"};private String[] persons={"开发人员","调试人员","测试人员"};private NonterminalExpression non;public Context(){TerminalExpression region=new TerminalExpression(regions);TerminalExpression person=new TerminalExpression(persons);non=new NonterminalExpression(region,person);}public void check(String info){boolean bool=non.Interpret(info);if(bool)System.out.println("识别成功");elseSystem.out.println("识别失败");}
}//TerminalExpression  终结符实例
class TerminalExpression implements Expression{private Set<String> set=new HashSet<>();public TerminalExpression(String[] data){for(String str:data)set.add(str);}@Overridepublic boolean Interpret(String info){return set.contains(info);}
}//NonterminalExpression 非终结符class NonterminalExpression implements Expression{private TerminalExpression region;private TerminalExpression person;public NonterminalExpression(TerminalExpression region,TerminalExpression person){this.region=region;this.person=person;}@Overridepublic boolean Interpret(String info) {//B区的调试人员  --》str={"B区","调试人员"}String[] string=info.split("的");return region.Interpret(string[0]) && person.Interpret(string[1]);}
}//AbstractExpression  抽象接口 声明一个程序的解释方法
interface Expression{//输入数据来自于Contextpublic boolean Interpret(String info);}

迭代器模式(Iterator)
在这里插入图片描述
在这里插入图片描述

import com.sun.deploy.security.SelectableSecurityManager;import java.util.*;public class Pattern{public static void main(String[] args){BookAggregate bookAggregate=new BookAggregate();String[] names={"数据结构","操作系统","计算机网络","计算机组成原理"};double[] prices={10.24,11.08,40.96,81.92};for (int i=0;i<4;i++)bookAggregate.Add(new Book(names[i],prices[i]));Iterator bookIterator=bookAggregate.CreateIterator();while (bookIterator.hasNext()) {Book book=(Book)bookIterator.next();System.out.println(book.getName()+"  "+book.getPrice());}}
}interface Iterator{public boolean hasNext();public Object next();}class BookIterator implements Iterator{private int index;  //索引private BookAggregate bookAggregate;   //聚合器public BookIterator(BookAggregate bookAggregate){this.index=0;this.bookAggregate=bookAggregate;}@Overridepublic boolean hasNext() {if(index<bookAggregate.getSize())return true;elsereturn false;}@Overridepublic Object next() {Object object= bookAggregate.Get(index);index++;return object;}
}interface Aggregate{public Iterator CreateIterator();}class BookAggregate implements Aggregate{private List<Book> list=new ArrayList<Book>();public void Add(Book book){list.add(book);}public Book Get(int index){return list.get(index);}public int getSize(){return list.size();}@Overridepublic Iterator CreateIterator() {return new BookIterator(this);}
}class Book{private String name;private double price;public  Book(String name,double price){this.name=name;this.price=price;}public String getName(){return name;}public double getPrice(){return price;}
}

中介者模式(Mediator)
在这里插入图片描述
在这里插入图片描述
如果有多个同事:
在这里插入图片描述

import java.util.*;
//Mediator Pattern 中介者模式
public class Pattern{public static void main(String[] args){ConcreteMediator mediator=new ConcreteMediator();Colleague colleague1=new Colleague1(mediator);Colleague colleague2=new Colleague2(mediator);mediator.setColleague1(colleague1);mediator.setColleague2(colleague2);colleague1.sendMessage("123");colleague2.sendMessage("456");}
}//抽象中介者
abstract class Mediator{public abstract void sendMessage(String message,Colleague colleague);
}//具体中介者
class ConcreteMediator extends Mediator{private Colleague colleague1;private Colleague colleague2;public void setColleague1(Colleague colleague1){this.colleague1=colleague1;}public void setColleague2(Colleague colleague2){this.colleague2=colleague2;}@Overridepublic void sendMessage(String message,Colleague colleague){if(colleague==colleague1) {colleague2.receiveMessage(message);  //如果是1发送的消息就将消息传给2}elsecolleague1.receiveMessage(message);}}//抽象同事
abstract class Colleague{protected Mediator mediator;public abstract void sendMessage(String message);public abstract void receiveMessage(String message);}//同事1
class Colleague1 extends Colleague{public  Colleague1(Mediator mediator){this.mediator=mediator;}public void sendMessage(String message){mediator.sendMessage(message,this);}public void receiveMessage(String message){System.out.println("同事1收到消息:"+message);}}//同事2
class Colleague2 extends Colleague{public  Colleague2(Mediator mediator){this.mediator=mediator;}public void sendMessage(String message){mediator.sendMessage(message,this);}public void receiveMessage(String message){System.out.println("同事2收到消息:"+message);}}

备忘录模式(Memento)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

观察者模式(Observer)
在这里插入图片描述
在这里插入图片描述

import java.util.*;
//Observer Pattern 观察者模式
public class Pattern{public static void main(String[] args){Subject subject1=new ConcreteSubject("目标1");Observer observer1=new ConcreteObserver("张三",subject1);Observer observer2=new ConcreteObserver("李四",subject1);Observer observer3=new ConcreteObserver("王五",subject1);//System.out.println("目标1的状态发生改变");subject1.setState("更新啦");//subject1.Notify();}
}//目标接口
interface Subject{//添加观察者public void Attach(Observer observer);//删除观察者public void Detach(Observer observer);//状态改变后通知所有观察者改变状态public void Notify();public void setState(String state);public String getState();}class ConcreteSubject implements Subject{private List<Observer> observerList;private String state;private String name;public ConcreteSubject(String name){state="未更新";this.name=name;observerList=new ArrayList<Observer>();}public void Attach(Observer observer){observerList.add(observer);}public void Detach(Observer observer){observerList.remove(observer);}public void Notify(){for (Observer observer:observerList)observer.update();}public void setState(String state){this.state=state;System.out.println(name+"的状态发生改变"+state);Notify();}public String getState(){return state;}}//观察者接口
interface  Observer{//更新观察者状态public void update();}class ConcreteObserver implements Observer{private String name;private Subject subject;private String stste;public ConcreteObserver(String name,Subject subject){this.name=name;this.subject=subject;stste=subject.getState();subject.Attach(this);}@Overridepublic void update() {System.out.println(name + "收到通知");stste=subject.getState();System.out.println(name+"改变状态后为:"+stste);}
}

模版方法模式(Template Method)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

状态模式(State)

在这里插入图片描述


import java.util.*;
//State Pattern 状态模式
public class Pattern{public static void main(String[] args){Context context=new Context();System.out.println(context.getState());context.request();context.request();context.request();System.out.println(context.getState());context.request();}
}class Context{   //上下文  贩卖机private int count;private State state;public void request(){state.handle(this);}public Context(){count=3;state=new stateA();}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public void setState(State state) {this.state = state;}public State getState() {return state;}
}interface State{public void handle(Context context);}class stateA implements State{   //有货@Overridepublic void handle(Context context) {int count=context.getCount();if (count>=1){System.out.println("购买成功");context.setCount(count-1);if (context.getCount()==0)context.setState(new stateB());}elseSystem.out.println("购买失败");}
}class stateB implements State{   //无货@Overridepublic void handle(Context context) {int count=context.getCount();if(count==0){System.out.println("购买失败");context.setCount(5);System.out.println("补货成功,重新购买");context.setState(new stateA());}}
}

策略模式(Strategy)
在这里插入图片描述
在这里插入图片描述
例如:超市不同等级会员打折程度不同

import java.util.*;
//Strategy Pattern 策略模式
public class Pattern{public static void main(String[] args){Strategy add=new AddStrategy();Strategy sub=new SubStrategy();Strategy multiply=new MultiplyStrategy();OperationContext context=new OperationContext(add);context.operation(200,340);context=new OperationContext(sub);context.operation(200,340);context=new OperationContext(multiply);context.operation(200,340);}
}class OperationContext{   //上下文private Strategy strategy;public OperationContext(Strategy strategy){this.strategy=strategy;}public void operation(int a,int b){strategy.TwoNumberOperation(a,b);}}interface Strategy{public void TwoNumberOperation(int a,int b);}class AddStrategy implements Strategy{public void TwoNumberOperation(int a,int b){System.out.println(a+b);}
}class SubStrategy implements Strategy{public void TwoNumberOperation(int a,int b){System.out.println(a-b);}
}class MultiplyStrategy implements Strategy{public void TwoNumberOperation(int a,int b){System.out.println(a*b);}
}

访问者模式(Visitor)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.util.*;
//Visitor Pattern 访问者模式
public class Pattern{public static void main(String[] args){PersonStructure structure=new PersonStructure();Visitor visitor1=new visitor1();System.out.println("访问者1的访问记录:");structure.Accept(visitor1);Visitor visitor2=new visitor2();System.out.println("访问者2的访问记录:");structure.Accept(visitor2);}
}interface Visitor{public void visitStudent(Student student);//访问public void visitTeacher(Teacher teacher);}class visitor1 implements Visitor{   //访问者1@Overridepublic void visitStudent(Student student) {System.out.println("访问者1访问学生:"+student.name);    }@Overridepublic void visitTeacher(Teacher teacher) {System.out.println("访问者1访问老师:"+teacher.name);    }
}class visitor2 implements Visitor{   //访问者2@Overridepublic void visitStudent(Student student) {System.out.println("访问者2访问学生:"+student.name);}@Overridepublic void visitTeacher(Teacher teacher) {System.out.println("访问者2访问老师:"+teacher.name);}
}class PersonStructure{private List<Person> personlist=new ArrayList<>();public PersonStructure(){personlist.add(new Student("zhangsan"));personlist.add(new Student("lisi"));personlist.add(new Student("wangwu"));personlist.add(new Teacher("hanmei"));personlist.add(new Teacher("liuyang"));personlist.add(new Teacher("zhaona"));}public void Accept(Visitor visitor){for(Person person:personlist){person.Accept(visitor);}}
}//element
abstract class Person{public String name;public abstract void  Accept(Visitor visitor);
}class Student extends Person{public Student(String name){this.name=name;}@Overridepublic void Accept(Visitor visitor) {visitor.visitStudent(this);}
}class Teacher extends Person{public Teacher(String name){this.name=name;}@Overridepublic void Accept(Visitor visitor) {visitor.visitTeacher(this);}
}
import java.util.*;
//Visitor Pattern 访问者模式
public class Pattern{public static void main(String[] args){PersonStructure structure=new PersonStructure();Visitor1 visitor1=new Visitor1();System.out.println("访问者1的访问记录:");structure.Accept(visitor1);System.out.println("学生年龄的总和:"+visitor1.getStudentAge());System.out.println("老师年龄的总和:"+visitor1.getTeacherAge());Visitor2 visitor2=new Visitor2();System.out.println("访问者2的访问记录:");structure.Accept(visitor2);System.out.println("学生最高成绩:"+visitor2.getMaxScore());System.out.println("老师最高工龄:"+visitor2.getMaxWorkAge());}
}interface Visitor{public void visitStudent(Student student);//访问public void visitTeacher(Teacher teacher);}class Visitor1 implements Visitor{   //访问者1   分别统计老师和学生的年龄总和private int studentAge=0;private int teacherAge=0;public int getStudentAge() {return studentAge;}public int getTeacherAge() {return teacherAge;}@Overridepublic void visitStudent(Student student) {System.out.println("访问者1访问学生:"+student.getName()+"  年龄:"+student.getAge());studentAge+=student.getAge();}@Overridepublic void visitTeacher(Teacher teacher) {System.out.println("访问者1访问老师:"+teacher.getName()+"  年龄:"+teacher.getAge());teacherAge+=teacher.getAge();}
}class Visitor2 implements Visitor{   //访问者2   分别求出最高年龄和工龄private int maxScore=-1;private int maxWorkAge=-1;public int getMaxScore() {return maxScore;}public int getMaxWorkAge() {return maxWorkAge;}public void visitStudent(Student student) {System.out.println("访问者2访问学生:"+student.getName()+"  成绩:"+student.getGrade());if(student.getGrade()>maxScore)maxScore=student.getGrade();}@Overridepublic void visitTeacher(Teacher teacher) {System.out.println("访问者2访问老师:"+teacher.getName()+"  工龄:"+teacher.getWorkYear());if(teacher.getWorkYear()>maxWorkAge)maxWorkAge=teacher.getWorkYear();}
}class PersonStructure{private List<Person> personlist=new ArrayList<>();public PersonStructure(){personlist.add(new Student("zhangsan",20,70));personlist.add(new Student("lisi",22,90));personlist.add(new Student("wangwu",25,99));personlist.add(new Teacher("hanmei",26,1));personlist.add(new Teacher("liuyang",39,12));personlist.add(new Teacher("zhaona",50,23));}public void Accept(Visitor visitor){for(Person person:personlist){person.Accept(visitor);}}
}//element
abstract class Person{private String name;private int age;public Person(String name,int age){this.name=name;this.age=age;}public abstract void  Accept(Visitor visitor);public String getName() {return name;}public int getAge() {return age;}
}class Student extends Person{private int grade;public Student(String name,int age,int grade){super(name,age);this.grade=grade;}public int getGrade() {return grade;}@Overridepublic void Accept(Visitor visitor) {visitor.visitStudent(this);}
}class Teacher extends Person{private int workYear;public Teacher(String name,int age,int workYear){super(name,age);this.workYear=workYear;}public int getWorkYear() {return workYear;}@Overridepublic void Accept(Visitor visitor) {visitor.visitTeacher(this);}
}
http://www.dtcms.com/a/528074.html

相关文章:

  • 06-MySQL基础查询
  • 蓬莱网站建设哪家专业苏州智能网站开发
  • 医院慢病管理软件系统问题域需求分析文档(示例)
  • Java 大视界 -- Java 大数据机器学习模型在舆情分析中的情感倾向判断与话题追踪
  • 用于小样本故障增量学习的多视图 Shapelet 原型网络
  • 动态规划思想的延伸:计数模式再升级——巧妙捕捉「优美子数组」
  • 徐州提供网站建设要多少钱杭州房产网我爱我家官网
  • 鸿蒙NEXT系列之NDK UI监听组件事件
  • 20251025 分治总结
  • CentOS上安装dpkg的方法
  • 【C++ 泛型编程】基于哈希表封装 unordered_set(附完整源码解析)
  • 【Docker】docker部署一个服务
  • 【C++】set map 的使用
  • mormot.net.sock.pas的总体设计分析
  • 上海企业网站制作哪家专业wordpress适合做大型网站吗
  • 建设银行网站怎么看不见余额数字展馆设计
  • 【数组二分查找+数组反转】2022-11-19
  • 【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
  • Spring Boot3零基础教程,Profile 环境隔离用法,笔记55
  • 【MATLAB例程】二维环境定位,GDOP和CRLB的计算,锚点数=4的情况(附代码下载链接)
  • 英语“近音“易混单词
  • 代码随想录Day62|总结篇
  • 基于VMware和Cent OS的Docker Engine安装与配置
  • 十七、OpenCV中HighGUI模块的介绍和使用
  • 【JVM】详解 编译器原理与优化技术
  • 良好形象的重要性----反思
  • kali抓包流量
  • Python 正则表达式深度解析与实战指南
  • 开源 Linux 服务器与中间件(十二)FRP内网穿透应用
  • 石家庄网站建设王道下拉棒wordpress 类似