1、策略模式
package com.yqj.pattern.strategy;
abstract class Duck{
protected FlyBehavior flyBehavior;
public Duck(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public abstract void display();
public void quack(){
System.out.println("鸭子嘎嘎叫");
}
public void swim(){
System.out.println("鸭子会游泳");
}
public void fly(){
if (flyBehavior!=null){
flyBehavior.fly();
}
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
}
class PekingDuck extends Duck{
public PekingDuck() {
super(new BadFlyBehavior());
}
@Override
public void display() {
System.out.println("北京鸭");
}
}
class ToyDuck extends Duck{
public ToyDuck() {
super(new UnFlyBehavior());
}
@Override
public void display() {
System.out.println("玩具鸭");
}
}
class WildDuck extends Duck{
public WildDuck() {
super(new GoodFlyBehavior());
}
@Override
public void display() {
System.out.println("野鸭");
}
}
interface FlyBehavior{
void fly();
}
class BadFlyBehavior implements FlyBehavior{
@Override
public void fly() {
System.out.println("飞翔技术一般");
}
}
class GoodFlyBehavior implements FlyBehavior{
@Override
public void fly() {
System.out.println("飞翔技术高超");
}
}
class UnFlyBehavior implements FlyBehavior{
@Override
public void fly() {
System.out.println("不会飞翔");
}
}
public class Client {
public static void main(String[] args) {
Duck wildDuck = new WildDuck();
wildDuck.fly();
System.out.println("=====");
Duck pekingDuck = new PekingDuck();
pekingDuck.fly();
pekingDuck.setFlyBehavior(new UnFlyBehavior());
pekingDuck.fly();
System.out.println("=====");
Duck toyDuck = new ToyDuck();
toyDuck.fly();
}
}
2、职责链模式
package com.yqj.pattern.responsibility;
class PurchaseRequest{
private Integer id;
private Float price;
public PurchaseRequest(Integer id, Float price) {
this.id = id;
this.price = price;
}
public Integer getId() {
return id;
}
public Float getPrice() {
return price;
}
}
abstract class Approver{
protected Approver approver;
protected String name;
public Approver(String name) {
this.name = name;
}
public void setApprover(Approver approver) {
this.approver = approver;
}
public abstract void processRequest(PurchaseRequest request);
}
class DepartmentApprover extends Approver{
public DepartmentApprover(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest request) {
if (request.getPrice() <= 5000){
System.out.println("请求编号:"+request.getId()
+" 金额:"+request.getPrice()+"被"+this.name+"处理");
}else {
approver.processRequest(request);
}
}
}
class CollegeApprover extends Approver{
public CollegeApprover(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest request) {
if (request.getPrice() <= 10000 && request.getPrice() > 5000){
System.out.println("请求编号:"+request.getId()
+" 金额:"+request.getPrice()+"被"+this.name+"处理");
}else {
approver.processRequest(request);
}
}
}
class ViceSchoolMasterApprover extends Approver{
public ViceSchoolMasterApprover(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest request) {
if (request.getPrice() <= 30000 && request.getPrice() > 10000){
System.out.println("请求编号:"+request.getId()
+" 金额:"+request.getPrice()+"被"+this.name+"处理");
}else {
approver.processRequest(request);
}
}
}
class SchoolMasterApprover extends Approver{
public SchoolMasterApprover(String name) {
super(name);
}
@Override
public void processRequest(PurchaseRequest request) {
if (request.getPrice() > 30000){
System.out.println("请求编号:"+request.getId()
+" 金额:"+request.getPrice()+"被"+this.name+"处理");
}else {
approver.processRequest(request);
}
}
}
public class Client {
public static void main(String[] args) {
PurchaseRequest request = new PurchaseRequest(233, 6000.0f);
Approver departmentApprover = new DepartmentApprover("系主任");
Approver collegeApprover = new CollegeApprover("院长");
Approver viceSchoolMasterApprover = new ViceSchoolMasterApprover("副校长");
Approver schoolMasterApprover = new SchoolMasterApprover("校长");
departmentApprover.setApprover(collegeApprover);
collegeApprover.setApprover(viceSchoolMasterApprover);
viceSchoolMasterApprover.setApprover(schoolMasterApprover);
schoolMasterApprover.setApprover(departmentApprover);
departmentApprover.processRequest(request);
viceSchoolMasterApprover.processRequest(request);
}
}