设计模式实验代码

这里附带Word文档下载https://download.csdn.net/download/qq_36986067/11166539

目录

实验一 单例模式的应用

实验二 工厂模式的应用

实验三 抽象工厂模式的应用

实验四  建造者模式的应用

实验五 适配器模式的应用

实验六 桥接模式的应用

实验七 装饰模式的应用

实验八 外观模式的应用

实验九 观察者模式的应用

实验十 访问者模式的应用


实验一 单例模式的应用

1 实验目的

1) 掌握单例模式(Singleton)的特点

2) 分析具体问题,使用单例模式进行设计。

2 实验内容和要求

很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。

                 

通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。

事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎么实现呢?绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

4 UML图

5 实验主要代码

class AppConfig {
	private static AppConfig config;
	private String paramaterA;//参数
	public String getParamaterA() {
		return paramaterA;
	}
	public void setParamaterA(String paramaterA) {
		this.paramaterA = paramaterA;
	}
	//私有化构造方法
	private AppConfig() {
	}
	public static AppConfig GetInstanse() {
		if (config == null) {
			config = new AppConfig();
		}
		return config;
	}
}
//测试类
public class Client {  
	public static void main(String[] args) {
		AppConfig appConfig1 = AppConfig.GetInstanse();
		appConfig1.setParamaterA("ParaA");
		System.out.println("appconfig1 = " + appConfig1.getParamaterA());
	} 
} 

实验二 工厂模式的应用

1 实验目的

1) 掌握工厂模式(Factory)的特点

2) 分析具体问题,使用工厂模式进行设计。

2 实验内容和要求

有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利用工厂模式改善设计,实现该OEM制造商的工厂模式。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

4 UML图

5 实验主要代码

public abstract class Laptop {// 一个抽象类
	public abstract void Show();

}
public class HP extends Laptop{

	public void Show() {
		// TODO Auto-generated method stub
		System.out.println("HP笔记本");
	}

}
public class Acer extends Laptop {

	@Override
	public void Show() {
		// TODO Auto-generated method stub
		System.out.println("Acer笔记本");
	}

}
public class Lenovo extends Laptop {

	@Override
	public void Show() {
		// TODO Auto-generated method stub
		System.out.println("Lenovo笔记本");
	}

}
//抽象工厂类
public abstract class AbFactory {
	public abstract Laptop CreateLp();
}
public class HPFactory extends AbFactory {

	@Override
	public Laptop CreateLp() {
		return new HP();
	}

}
public class LenovoFactory extends AbFactory {

	@Override
	public Laptop CreateLp() {
		// TODO Auto-generated method stub
		return new Lenovo();
	}

}
public class AcerFactory extends AbFactory {

	@Override
	public Laptop CreateLp() {
		// TODO Auto-generated method stub
		return new Acer();
	}

}
//测试类
public class Client {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AbFactory fc1=new HPFactory();
		AbFactory fc2=new AcerFactory();
		AbFactory fc3=new LenovoFactory();
		Laptop hp=fc1.CreateLp();
		Laptop acer=fc2.CreateLp();
		Laptop lenovo=fc3.CreateLp();
		hp.Show();
		acer.Show();
		lenovo.Show();
	}

}

实验三 抽象工厂模式的应用

1 实验目的

1) 掌握抽象工厂模式(Abstract Factory)的特点

2) 分析具体问题,使用抽象工厂模式进行设计。

2 实验内容和要求

麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),实现这两个快餐店经营产品的抽象工厂模式。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

 

 

 

 

 

 

4 UML图

5 实验主要代码

public abstract class Hamburg {// 一个抽象汉堡包类
	public abstract void Show();
}
public class McHamburg extends Hamburg {

	@Override
	public void Show() {
		System.out.println("麦当劳的汉堡");
	}

}
public class KFCHamburg extends Hamburg {

	@Override
	public void Show() {
		// TODO Auto-generated method stub
		System.out.println("肯德基的汉堡");
	}

}
public abstract class Cola {
	public abstract void Show();
}
public class McCola extends Cola {

	@Override
	public void Show() {
		// TODO Auto-generated method stub
		System.out.println("麦当劳的可乐");
	}

}
public class KFCCola extends Cola {

	@Override
	public void Show() {
		// TODO Auto-generated method stub
		System.out.println("肯德基的可乐");
	}

}
//抽象工厂类
public abstract class Factory {
	public abstract Hamburg CreateHambury();
	public abstract Cola CreateCola();
}
public class MHfactory extends Factory {

	@Override
	public Hamburg CreateHambury() {
		// TODO Auto-generated method stub
		return new McHamburg();
	}

	@Override
	public Cola CreateCola() {
		// TODO Auto-generated method stub
		return new McCola();
	}

}
public class KFCfactory extends Factory {

	@Override
	public Hamburg CreateHambury() {
		// TODO Auto-generated method stub
		return new KFCHamburg();
	}

	@Override
	public Cola CreateCola() {
		// TODO Auto-generated method stub
		return new KFCCola();
	}

}
//测试类
public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Factory fc1=new MHfactory();
		Hamburg h1=fc1.CreateHambury();
		h1.Show();
		
		Factory fc2=new KFCfactory();
		Cola c1=fc2.CreateCola();
		c1.Show();
	}

}

实验四  建造者模式的应用

1 实验目的

1) 掌握建造者模式(Builder)的特点

2) 分析具体问题,使用建造者模式进行设计。

2 实验内容和要求

建造者模式是一种创建型模式,它主要是应对项目中一些复杂对象的创建工作。所谓“复杂对象”,是指此对象中还含有其它的子对象。我们现在定义一个场景:汽车生产必须包含车轮(Wheel)、油箱(OilBox)和车身(Body),应用建造者模式,实现该设计,构建BMW品牌和BenZ品牌汽车生产。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

 

5 实验主要代码

//汽车类
public class Car {
	private String wheels;
	private String oilbox;
	private String body;

	public String getWheels() {
		return wheels;
	}

	public void setWheels(String wheels) {
		this.wheels = wheels;
	}

	public String getOilbox() {
		return oilbox;
	}

	public void setOilbox(String oilbox) {
		this.oilbox = oilbox;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public void show() {
		System.out.println(wheels);
		System.out.println(oilbox);
		System.out.println(body);
	}
}

public abstract class Builder {
	Car createCar = new Car();

	public abstract void BuildWheels();

	public abstract void BuildOilBox();

	public abstract void BuildBody();

	public Car GetCar() {
		return createCar;
	}

}
public class BenzBuilder extends Builder {

	@Override
	public void BuildWheels() {
// TODO Auto-generated method stub
		createCar.setBody("benz的车身");
	}

	@Override
	public void BuildOilBox() {
// TODO Auto-generated method stub
		createCar.setOilbox("benz的邮箱");
	}

	@Override
	public void BuildBody() {
// TODO Auto-generated method stub
		createCar.setWheels("benz的轮子");
	}

}
public class BMWBuilder extends Builder {

	@Override
	public void BuildWheels() {
// TODO Auto-generated method stub
		createCar.setWheels("bmw的车轮");
	}

	@Override
	public void BuildOilBox() {
// TODO Auto-generated method stub
		createCar.setOilbox("bmw的油箱");
	}

	@Override
	public void BuildBody() {
// TODO Auto-generated method stub
		createCar.setBody("bmw的车身");
	}

}
//指挥者
public class Director {
	private Builder builder;

	public Director(Builder builder) {
		this.builder = builder;
	}

	public void setBuilder(Builder builder) {
		this.builder = builder;
	}

	public void CreateCar() {
		builder.BuildBody();
		builder.BuildOilBox();
		builder.BuildWheels();
	}
}
//客户端类
public class Client {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Car car;
		Builder builder = new BenzBuilder();
		Director dir = new Director(builder);
		dir.CreateCar();
		car = builder.GetCar();
		car.show();
	}
}

实验五 适配器模式的应用

1 实验目的

1) 掌握适配器模式(Adapter)的特点

2) 分析具体问题,使用适配器模式进行设计。

2 实验内容和要求

一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。应用适配器模式,用控制台应用程序完善该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

//定义图形接口
public interface Shape {
 // 统一行为,可以画圆、矩形等
 public void draw();
}
//下面分别是画圆、矩形、线条类
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("画一个圆");
    }
}
public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("画一个矩形");
    }
}

public class Line implements Shape {
    @Override
    public void draw() {
        System.out.println("画一条线");
    }
}
//这是外包做的角度类
public class Angle {
 public void drawAngle() {
     System.out.println("画一个角度");
 }
}
public class AngleAdapter extends Angle implements Shape {

    public void draw() {
        super.drawAngle();
    }
}
//客户端测试类
public class Client {
    public static void main(String[] args) {
        Shape c = new Circle();
        Shape r = new Rectangle();
        Shape l = new Line();
        Shape a = new AngleAdapter();

        c.draw();
        r.draw();
        l.draw();
        a.draw(); // 适配器将接口统一了
    }
}

实验六 桥接模式的应用

1 实验目的

1) 掌握桥接模式(Bridge)的特点

2) 分析具体问题,使用桥接模式进行设计。

2 实验内容和要求

一个咖啡店可以提供大杯(JorumCoffee)、中杯(MediumCoffee)、小杯(SmallCoffee)的咖啡(Coffee),为了满足不同用户的口味,在咖啡中可以添加牛奶(Milk),或者糖(Sugar),或者柠檬(Lemon),提供给用户不同口味的组合,如大杯咖啡加牛奶,中杯咖啡加糖,小杯咖啡加柠檬,小杯咖啡加糖等。应用桥接模式,用控制台应用程序实现该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

//口味
public interface Additives {
	public void add();
}
public class Milk implements Additives {

	@Override
	public void add() {
		System.out.print("加了牛奶");
	}
}
public class Sugar implements Additives {

	@Override
	public void add() {
		System.out.print("加了糖");
	}
}

public class Lemon implements Additives {

	@Override
	public void add() {
		System.out.print("加了柠檬");
	}

}
//咖啡接口
public interface Coffee {
    public void add(Additives additives);
    public void drink();
}
public class SmallCoffee implements Coffee {
	private Additives additives;
    @Override
    public void add(Additives additives) {
        this.additives=additives;
    }
    @Override
    public void drink() {
        additives.add();
        System.out.println("的小咖啡");
    }

}
public class MediumCoffee implements Coffee {
	    private Additives additives;
	    @Override
	    public void add(Additives additives) {
	        this.additives=additives;
	    }
	    @Override
	    public void drink() {
	        additives.add();
	        System.out.println("的中咖啡");
	    }
}
public class BigCoffee implements Coffee {
	 private Additives additives;
	    @Override
	    public void add(Additives additives) {
	        this.additives=additives;
	    }
	    @Override
	    public void drink() {
	        additives.add();
	        System.out.println("的大咖啡");
	    }
}
//测试类
public class Client {

	public static void main(String[] args) {
		Coffee coffee = new SmallCoffee();
		Additives sugar=new Sugar();
		coffee.add(sugar);
		coffee.drink();
	}
}

实验七 装饰模式的应用

1 实验目的

1) 掌握装饰模式(Decorator)的特点

2) 分析具体问题,使用装饰模式进行设计。

2 实验内容和要求

DQ是著名的冰激凌专卖店,口味非常丰富,每种产品可以添加多种配料,如  (1)奥利奥OreoCookies

(2)杏仁Almond  

(3)腰果Cashews 

(4)核桃pecan

(5)葡萄干raisin

(6)巧克力ChocolateChip

(7)果酱Strawberry等,

每添加一种配料需要2元钱,需要设计一个系统来计算价格。应用装饰模式,用控制台应用程序实现该设计。绘制该模式的UML图。

3 实验环境

Eclipse

语言:Java

4 UML图

5 实验主要代码

public abstract class Component {
    public abstract void BaseIce();
    public abstract int Money();
}//组件
public class IceCream extends Component {
	@Override
	public void BaseIce() {
		System.out.println(" 冰激凌");
	}
	@Override
	public int Money() {
		return 10;
	}
}
//抽象装饰类
public class Decorator extends Component {
	protected Component component;
	public void Decorate(Component component) 
    {
        this.component = component;
    }
	@Override
	public void BaseIce() {
        if (component != null)
        {
    		component.BaseIce();
        }
	}
	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return component.Money();
	}
}
//具体装饰类
public class OreoCookies extends Decorator {
	@Override
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 奥利奥");
	}
	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}
public class Almond extends Decorator {
	@Override
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 杏仁");
	}

	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}


public class Cashews extends Decorator {
	@Override
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 腰果");
	}

	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}
public class Pecan extends Decorator {
	@Override
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 核桃");
	}

	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}
public class Raisin extends Decorator {
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 葡萄干");
	}

	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}
public class ChocolateChip extends Decorator {
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 巧克力");
	}

	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}
public class Strawberry extends Decorator {
	public void BaseIce() {
		super.BaseIce();
		System.out.println(" 果酱");
	}

	@Override
	public int Money() {
		// TODO Auto-generated method stub
		return super.Money()+2;
	}
}
//客户端测试类
public class Client {

	public static void main(String[] args) {
		IceCream icecream = new IceCream();
        OreoCookies O = new OreoCookies();
        Almond A = new Almond();
        Cashews C = new Cashews();
        Pecan P = new Pecan();
        Raisin R = new Raisin();
        ChocolateChip Ch = new ChocolateChip();
        Strawberry S = new Strawberry();
        System.out.println("冰激凌价格:"+icecream.Money()+"元");            
        System.out.println("购买的冰淇淋组合:");
        O.Decorate(icecream);
        A.Decorate(O);
        C.Decorate(A);
        P.Decorate(C);
        Ch.Decorate(P);
        Ch.BaseIce();
        System.out.println("商品价格:" + Ch.Money() + "元");
	}
}

实验八 外观模式的应用

1 实验目的

1) 掌握外观模式(Facade)的特点

2) 分析具体问题,使用外观模式进行设计。

2 实验内容和要求

一个保安系统的,由录像机、电灯、红外线监控和警报器组成。保安系统的操作人员需要经常将这些仪器启动和关闭。保安类需要用到所有的录像机(Camera)、电灯(Light)、感应器(Sensor)和警报器(Alarm)对象,保安觉得使用不方便。应用外观模式,用控制台应用程序改进该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

//定义一个设备接口
public interface Equipment {
	public void turnOn(); // 打开设备
public void turnOff(); // 关闭设备
}
public class Camera implements Equipment {
    public void turnOn() {
        System.out.println("打开录像机");
    }
    public void turnOff() {
        System.out.println("关闭录像机");
    }
}
public class Light implements Equipment {
    public void turnOn() {
        System.out.println("打开电灯");
    }
    public void turnOff() {
        System.out.println("关闭电灯");
    }
}
public class Sensor implements Equipment {
    @Override
    public void turnOn() {
        System.out.println("打开传感器");
    }

    @Override
    public void turnOff() {
        System.out.println("关闭传感器");
    }
}
public class Alarm implements Equipment {
    @Override
    public void turnOn() {
        System.out.println("打开警报器");
    }

    @Override
    public void turnOff() {
        System.out.println("关闭警报器");
    }
}
public class Console {
    private Equipment camera = new Camera();
    private Equipment light = new Light();
    private Equipment sensor = new Sensor();
    private Equipment alarm = new Alarm();

    public void turnOnAll() {
        camera.turnOn();
        light.turnOn();
        sensor.turnOn();
        alarm.turnOn();
    }

    public void turnOffAll() {
        camera.turnOff();
        light.turnOff();
        sensor.turnOff();
        alarm.turnOff();
    }
}
public class Cline {

	public static void main(String[] args) {
        Console console = new Console();
        console.turnOnAll();
        console.turnOffAll();
	}

}

实验九 观察者模式的应用

1 实验目的

1) 掌握观察者模式(Observer)的特点

2) 分析具体问题,使用观察者模式进行设计。

2 实验内容和要求

网上商店中如果商品(product)在名称(name)、价格(price)等方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一大特色。如何设计实现? 说明你所选择的设计模式,画出类关系图并指明各个类的角色。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

4 UML图

5 实验主要代码

public abstract class Observer {
	public abstract void update();
}
public class Subject {
	private ArrayList<Observer> observers = new ArrayList<Observer>();
	
	public void increase(Observer observer){
		observers.add(observer);
	}
	public void delete(Observer observer){
		observers.remove(observer);
	}
	
	public void notifyVIP(){
		for(int i=0; i<observers.size(); i++){
			observers.get(i).update();
		}
	}
}

public class MessageObserver extends Observer {
	private String name;
	private String price;
	private MessageSubject messageSubject;
	
	public MessageObserver(MessageSubject messageSubject) {
		this.messageSubject = messageSubject;
	}
	
	@Override
	public void update() {
		name = messageSubject.getName();
		price = messageSubject.getPrice();
		System.out.println("名称变化:"+name);
		System.out.println("价格变化:"+price);
	}
}

public class MessageSubject extends Subject{
	private String name;
	private String price;
	
	public MessageSubject(String name,String price){
		this.name = name;
		this.price = price;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	
}


//客户端测试类
public class Client {
	public static void main(String[] args){
		MessageSubject messageSubject1 = new MessageSubject("联想笔记本", "降价");
		MessageSubject messageSubject2 = new MessageSubject("小米手机", "未降价");
		
		messageSubject1.increase(new MessageObserver(messageSubject1));
		messageSubject2.increase(new MessageObserver(messageSubject2));
		System.out.println("尊贵的会员,您之前加入购物车的商品:");
		messageSubject1.notifyVIP();
		System.out.println("尊贵的会员,您之前加入购物车的商品:");
		messageSubject2.notifyVIP();
		
	}
}

 

 

实验十 访问者模式的应用

1 实验目的

1) 掌握访问者模式(Visitor)的特点

2) 分析具体问题,使用访问者模式进行设计。

2 实验内容和要求

苹果公司有工业设计,营销零售,财务管理等多个多部门,工业设计部门有很多工程师(Engineer),营销零售部门有很多销售员(Salesman),财务管理部门有很多经济师(Economist),他们都各自有自己的专长。人事管理部门需要统一的管理各类人员的收入和假期等福利。

年底,苹果公司进行了表彰,工业设计部门小张、小王表现突出,完成了很多产品的研发;营销零售部门小陈、小李销售业绩突出;财务管理部门小周的资金管理高效,人事部门需要统一给他们加薪500元,加假期3天。应用访问者模式,用控制台应用程序实现该设计。绘制该模式的UML图。

3 实验环境

 

Eclipse

语言:Java

 

 

4 UML图

5 实验主要代码

public class test {
static void Main(String[] args)
{
EnginDepartment enginDepartment = new EnginDepartment();
SaleDepartment saleDepartment = new SaleDepartment();
EconomyDepartment economyDepartment = new EconomyDepartment();
Engineer xiaozhang = new Engineer("小张",5000,30);
Engineer xiaowang = new Engineer("小王", 5100, 29);
enginDepartment.insert(xiaowang);
enginDepartment.insert(xiaozhang);
Salesman xiaochen = new Salesman("小陈", 4500, 10);
Salesman xiaoli = new Salesman("小李", 6000, 5);
saleDepartment.insert(xiaochen);
saleDepartment.insert(xiaoli);
Economist xiaozhou = new Economist("小周", 5000, 25);
economyDepartment.insert(xiaozhou);
enginDepartment.show();
saleDepartment.show();
economyDepartment.show();
Employees employees = new Employees();
employees.attach(xiaozhang);
employees.attach(xiaowang);
employees.attach(xiaochen);employees.attach(xiaoli);
employees.attach(xiaozhou);
IncomeVisitor incomeVisitor = new IncomeVisitor();
DayVisitor dayVisitor = new DayVisitor();
employees.accept(incomeVisitor);
employees.accept(dayVisitor);
}
}
/**
* 访问者模式
*/
abstract class Employee {
private String name; // 姓名
private double income; // 收入
private int day; // 假期
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public abstract void accept(Visitor visitor);
}//工程师
class Engineer extends Employee {
public Engineer(String name, double income, int day) {
setName(name);
setIncome(income);
setDay(day);
}
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
//销售员
class Salesman extends Employee {
public Salesman(String name, double income, int day) {
setName(name);
setIncome(income);
setDay(day);
}
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
//经济师
class Economist extends Employee {
public Economist(String name, double income, int day) {
setName(name);
setIncome(income);
setDay(day);
}
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
//工业设计部
class EnginDepartment {
private List<Engineer> engineers = new ArrayList();public void insert(Engineer engineer) // 添加工程师
{
engineers.add(engineer);
}
public void delete(Engineer engineer) // 删除工程师
{
engineers.remove(engineer);
}
public void show() // 显示所有工程师信息
{
for (int i = 0; i < engineers.size(); i++) {
System.out.println("工业设计部:" + engineers.get(i).getName() + " 薪资为:
" + engineers.get(i).getIncome() + " 假期为:"
+ engineers.get(i).getDay());
}
}
}
//销售部
class SaleDepartment {
private List<Engineer> salesman = new ArrayList();
public void insert(Engineer engineer) // 添加工程师
{
salesman.add(engineer);
}
public void delete(Engineer engineer) // 删除工程师
{
salesman.remove(engineer);
}
public void show() // 显示所有工程师信息
{
for (int i = 0; i < salesman.size(); i++) {
System.out.println("工业设计部:" + salesman.get(i).getName() + " 薪资为:
" + salesman.get(i).getIncome() + " 假期为:"
+ salesman.get(i).getDay());
}
}}
//财务部
class EconomyDepartment {
private List<Engineer> economists = new ArrayList();
public void insert(Engineer engineer) // 添加工程师
{
economists.add(engineer);
}
public void delete(Engineer engineer) // 删除工程师
{
economists.remove(engineer);
}
public void show() // 显示所有工程师信息
{
for (int i = 0; i < economists.size(); i++) {
System.out.println("工业设计部:" + economists.get(i).getName() + " 薪资
为:" + economists.get(i).getIncome()
+ " 假期为:" + economists.get(i).getDay());
}
}
}
//观察者父类
abstract class Visitor {
public abstract void visit(Employee employee);
}
//涨薪类
class IncomeVisitor extends Visitor {
public void visit(Employee employee) {
employee.setIncome(employee.getIncome() + 500);
System.out.println(employee.getName() + "的薪资为:" + employee.getIncome());
}
}
//涨假期类
class DayVisitor extends Visitor {
public void visit(Employee employee) {
employee.setDay(employee.getDay() + 500); // 假期增加 3 天System.out.println(employee.getName() + "的假期为:" + employee.getDay() + "
天");
}
}
//待表彰员工
class Employees {
private List<Employee> employees = new ArrayList();
public void attach(Employee employee) // 添加表彰员工
{
employees.add(employee);
}
public void detach(Employee employee) // 删除表彰员工
{
employees.remove(employee);
}
public void accept(Visitor visitor) // 奖励员工
{
for (int i = 0; i < employees.size(); i++) {
employees.get(i).accept(visitor);
}
}
}

猜你喜欢

转载自blog.csdn.net/qq_36986067/article/details/89955237