Compare commits

...

8 Commits

Author SHA1 Message Date
ddc6253386 added lab4 ex2 2024-10-13 18:37:53 +02:00
2598af8d3a added lab4 ex1 2024-10-13 18:23:14 +02:00
3a2484a123 added command pattern example 2024-10-13 18:22:53 +02:00
7c3d0b2cbd added lab3 ex2 2024-10-07 11:14:07 +02:00
5fbcd72ea6 added lab3 ex1 2024-10-07 11:01:02 +02:00
1ab845574a added lab2 ex2 2024-10-07 10:37:10 +02:00
50e6ed18df added abstract factory example 2024-10-07 10:36:54 +02:00
2f41073a0f added lab2 ex1 2024-10-07 09:00:49 +02:00
84 changed files with 1151 additions and 0 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

View File

@@ -0,0 +1,15 @@
package lab2_factory_method.ex1;
public abstract class Car {
private String color = "blank";
public Car() {}
public abstract String getName();
public String getColor() {
return color;
}
public void paintColor(String color) {
this.color = color;
System.out.println("Painting car in " + color);
}
}

View File

@@ -0,0 +1,10 @@
package lab2_factory_method.ex1;
public abstract class CarCreator {
public Car orderCar(String color) {
Car car = createCar();
car.paintColor(color);
return car;
}
public abstract Car createCar();
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex1;
public class Coupe extends Car {
@Override
public String getName() {
return "Coupe";
}
}

View File

@@ -0,0 +1,9 @@
package lab2_factory_method.ex1;
public class CoupeCreator extends CarCreator {
@Override
public Car createCar() {
return new Coupe();
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex1;
public class Minivan extends Car {
@Override
public String getName() {
return "Minivan";
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex1;
public class MinivanCreator extends CarCreator {
@Override
public Car createCar() {
return new Minivan();
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex1;
public class Pickup extends Car {
@Override
public String getName() {
return "Pickup";
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex1;
public class PickupCreator extends CarCreator {
@Override
public Car createCar() {
return new Pickup();
}
}

View File

@@ -0,0 +1,21 @@
package lab2_factory_method.ex1;
public class Program {
public static void main(String[] args) {
CarCreator coupeCreator = new CoupeCreator();
CarCreator minivanCreator = new MinivanCreator();
CarCreator pickupCreator = new PickupCreator();
Car c1 = coupeCreator.orderCar("red");
System.out.println("Car "
+ c1.getName()
+ " "
+ c1.getColor()
+ " has been ordered.");
Car c2 = minivanCreator.orderCar("red");
System.out.println("Car "
+ c2.getName()
+ " "
+ c2.getColor()
+ " has been ordered.");
}
}

View File

@@ -0,0 +1,19 @@
package lab2_factory_method.ex2;
public class ArchitectOffice {
public static void main(String[] args) {
HouseCreator glassHouseCreator = new GlassHouseCreator();
HouseCreator bricksHouseCreator = new BricksHouseCreator();
HouseCreator woodHouseCreator = new WoodHouseCreator();
House house1 = glassHouseCreator.create();
house1.buildHouse();
house1.calculatePrice();
House house2 = bricksHouseCreator.create();
house2.buildHouse();
house2.calculatePrice();
House house3 = woodHouseCreator.create();
house3.buildHouse();
house3.calculatePrice();
}
}

View File

@@ -0,0 +1,13 @@
package lab2_factory_method.ex2;
public class BricksHouse extends House {
@Override
public void buildHouse() {
System.out.println("Building a bricks house");
}
@Override
public void calculatePrice() {
System.out.println("Modest bricks house");
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex2;
public class BricksHouseCreator extends HouseCreator {
@Override
public House create() {
return new BricksHouse();
}
}

View File

@@ -0,0 +1,13 @@
package lab2_factory_method.ex2;
public class GlassHouse extends House {
@Override
public void buildHouse() {
System.out.println("Building a glass house");
}
@Override
public void calculatePrice() {
System.out.println("Expensive glass house");
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex2;
public class GlassHouseCreator extends HouseCreator {
@Override
public House create() {
return new GlassHouse();
}
}

View File

@@ -0,0 +1,6 @@
package lab2_factory_method.ex2;
public abstract class House {
public abstract void buildHouse();
public abstract void calculatePrice();
}

View File

@@ -0,0 +1,5 @@
package lab2_factory_method.ex2;
public abstract class HouseCreator {
public abstract House create();
}

View File

@@ -0,0 +1,13 @@
package lab2_factory_method.ex2;
public class WoodHouse extends House {
@Override
public void buildHouse() {
System.out.println("Building a wooden house");
}
@Override
public void calculatePrice() {
System.out.println("Mid range wooden chalet");
}
}

View File

@@ -0,0 +1,8 @@
package lab2_factory_method.ex2;
public class WoodHouseCreator extends HouseCreator {
@Override
public House create() {
return new WoodHouse();
}
}

View File

@@ -0,0 +1,5 @@
package lab3_abstract_factory.ex1;
public abstract class AbstractDoor {
public abstract int getPrice();
}

View File

@@ -0,0 +1,5 @@
package lab3_abstract_factory.ex1;
public abstract class AbstractWall {
public abstract int getPrice();
}

View File

@@ -0,0 +1,5 @@
package lab3_abstract_factory.ex1;
public abstract class AbstractWindows {
public abstract int getPrice();
}

View File

@@ -0,0 +1,26 @@
package lab3_abstract_factory.ex1;
import lab3_abstract_factory.ex1.house_factories.DutchHouseFactory;
import lab3_abstract_factory.ex1.house_factories.GermanHouseFactory;
import lab3_abstract_factory.ex1.house_factories.SwissWoodChaletFactory;
public class ArchitectOffice {
public static void main(String[] args) {
House house1 = new House("Modern German house",
new GermanHouseFactory());
house1.buildHouse();
house1.calculatePrice();
House house2 = new House("Typical dutch house",
new DutchHouseFactory());
house2.buildHouse();
house2.calculatePrice();
House house3 = new House("Swiss wood chalet",
new SwissWoodChaletFactory());
house3.buildHouse();
house3.calculatePrice();
System.out.println(house1);
System.out.println(house2);
System.out.println(house3);
}
}

View File

@@ -0,0 +1,46 @@
package lab3_abstract_factory.ex1;
public class House {
private String name;
private HouseFactory houseFactory;
private AbstractWall wall;
private AbstractWindows windows;
private AbstractDoor door;
public House(String name, HouseFactory houseFactory) {
this.name = name;
this.houseFactory = houseFactory;
}
public void buildHouse() {
wall = houseFactory.buildWall();
windows = houseFactory.buildWindows();
door = houseFactory.buildDoor();
System.out.println(
"Building a house with "
+ wall
+ ", "
+ windows
+ " and a "
+ door
);
}
public void calculatePrice() {
int total = 0;
total += wall.getPrice();
total += windows.getPrice();
total += door.getPrice();
System.out.println("Total price: " + total);
}
@Override
public String toString() {
return "House '" + name + "' (\n"
+ " Walls: " + wall + "\n"
+ " Windows: " + windows + "\n"
+ " Door: " + door + "\n"
+ ")";
}
}

View File

@@ -0,0 +1,7 @@
package lab3_abstract_factory.ex1;
public abstract class HouseFactory {
public abstract AbstractWall buildWall();
public abstract AbstractWindows buildWindows();
public abstract AbstractDoor buildDoor();
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.doors;
import lab3_abstract_factory.ex1.AbstractDoor;
public class LargeDoor extends AbstractDoor {
@Override
public int getPrice() {
return 50;
}
@Override
public String toString() {
return "large door";
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.doors;
import lab3_abstract_factory.ex1.AbstractDoor;
public class ThinDoor extends AbstractDoor {
@Override
public int getPrice() {
return 25;
}
@Override
public String toString() {
return "thin door";
}
}

View File

@@ -0,0 +1,26 @@
package lab3_abstract_factory.ex1.house_factories;
import lab3_abstract_factory.ex1.AbstractDoor;
import lab3_abstract_factory.ex1.AbstractWall;
import lab3_abstract_factory.ex1.AbstractWindows;
import lab3_abstract_factory.ex1.HouseFactory;
import lab3_abstract_factory.ex1.doors.LargeDoor;
import lab3_abstract_factory.ex1.walls.BricksWall;
import lab3_abstract_factory.ex1.windows.FramedWindows;
public class DutchHouseFactory extends HouseFactory {
@Override
public AbstractWall buildWall() {
return new BricksWall();
}
@Override
public AbstractWindows buildWindows() {
return new FramedWindows();
}
@Override
public AbstractDoor buildDoor() {
return new LargeDoor();
}
}

View File

@@ -0,0 +1,26 @@
package lab3_abstract_factory.ex1.house_factories;
import lab3_abstract_factory.ex1.AbstractDoor;
import lab3_abstract_factory.ex1.AbstractWall;
import lab3_abstract_factory.ex1.AbstractWindows;
import lab3_abstract_factory.ex1.HouseFactory;
import lab3_abstract_factory.ex1.doors.LargeDoor;
import lab3_abstract_factory.ex1.walls.GlassWall;
import lab3_abstract_factory.ex1.windows.FullHeightWindows;
public class GermanHouseFactory extends HouseFactory {
@Override
public AbstractWall buildWall() {
return new GlassWall();
}
@Override
public AbstractWindows buildWindows() {
return new FullHeightWindows();
}
@Override
public AbstractDoor buildDoor() {
return new LargeDoor();
}
}

View File

@@ -0,0 +1,26 @@
package lab3_abstract_factory.ex1.house_factories;
import lab3_abstract_factory.ex1.AbstractDoor;
import lab3_abstract_factory.ex1.AbstractWall;
import lab3_abstract_factory.ex1.AbstractWindows;
import lab3_abstract_factory.ex1.HouseFactory;
import lab3_abstract_factory.ex1.doors.ThinDoor;
import lab3_abstract_factory.ex1.walls.WoodWall;
import lab3_abstract_factory.ex1.windows.FramedWindows;
public class SwissWoodChaletFactory extends HouseFactory {
@Override
public AbstractWall buildWall() {
return new WoodWall();
}
@Override
public AbstractWindows buildWindows() {
return new FramedWindows();
}
@Override
public AbstractDoor buildDoor() {
return new ThinDoor();
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.walls;
import lab3_abstract_factory.ex1.AbstractWall;
public class BricksWall extends AbstractWall {
@Override
public int getPrice() {
return 10;
}
@Override
public String toString() {
return "brick walls";
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.walls;
import lab3_abstract_factory.ex1.AbstractWall;
public class GlassWall extends AbstractWall {
@Override
public int getPrice() {
return 100;
}
@Override
public String toString() {
return "glass walls";
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.walls;
import lab3_abstract_factory.ex1.AbstractWall;
public class WoodWall extends AbstractWall {
@Override
public int getPrice() {
return 1;
}
@Override
public String toString() {
return "wood walls";
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.windows;
import lab3_abstract_factory.ex1.AbstractWindows;
public class FramedWindows extends AbstractWindows {
@Override
public int getPrice() {
return 100;
}
@Override
public String toString() {
return "framed windows";
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex1.windows;
import lab3_abstract_factory.ex1.AbstractWindows;
public class FullHeightWindows extends AbstractWindows {
@Override
public int getPrice() {
return 200;
}
@Override
public String toString() {
return "full-height windows";
}
}

View File

@@ -0,0 +1,18 @@
package lab3_abstract_factory.ex2;
public abstract class Car {
protected String name;
private String color = "blank";
public void paintColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public String getName() {
return name;
}
}

View File

@@ -0,0 +1,15 @@
package lab3_abstract_factory.ex2;
public class CarCreator {
private CarFactory carFactory;
public CarCreator(CarFactory carFactory) {
this.carFactory = carFactory;
}
public Car orderCar(String color) {
Car car = carFactory.createCar();
car.paintColor(color);
return car;
}
}

View File

@@ -0,0 +1,5 @@
package lab3_abstract_factory.ex2;
public abstract class CarFactory {
public abstract Car createCar();
}

View File

@@ -0,0 +1,31 @@
package lab3_abstract_factory.ex2;
import lab3_abstract_factory.ex2.car_factories.CoupeFactory;
import lab3_abstract_factory.ex2.car_factories.MinivanFactory;
import lab3_abstract_factory.ex2.car_factories.PickupFactory;
public class Program {
public static void main(String[] args) {
CarCreator coupeCreator = new CarCreator(new CoupeFactory());
CarCreator minivanCreator = new CarCreator(new MinivanFactory());
CarCreator pickupCreator = new CarCreator(new PickupFactory());
Car c1 = coupeCreator.orderCar("red");
System.out.println("Car "
+ c1.getName() + " "
+ c1.getColor()
+ " has been ordered.");
Car c2 = minivanCreator.orderCar("blue");
System.out.println("Car "
+ c2.getName() + " "
+ c2.getColor()
+ " has been ordered.");
Car c3 = pickupCreator.orderCar("green");
System.out.println("Car "
+ c3.getName() + " "
+ c3.getColor()
+ " has been ordered.");
}
}

View File

@@ -0,0 +1,12 @@
package lab3_abstract_factory.ex2.car_factories;
import lab3_abstract_factory.ex2.Car;
import lab3_abstract_factory.ex2.CarFactory;
import lab3_abstract_factory.ex2.cars.Coupe;
public class CoupeFactory extends CarFactory {
@Override
public Car createCar() {
return new Coupe();
}
}

View File

@@ -0,0 +1,12 @@
package lab3_abstract_factory.ex2.car_factories;
import lab3_abstract_factory.ex2.Car;
import lab3_abstract_factory.ex2.CarFactory;
import lab3_abstract_factory.ex2.cars.Minivan;
public class MinivanFactory extends CarFactory {
@Override
public Car createCar() {
return new Minivan();
}
}

View File

@@ -0,0 +1,12 @@
package lab3_abstract_factory.ex2.car_factories;
import lab3_abstract_factory.ex2.Car;
import lab3_abstract_factory.ex2.CarFactory;
import lab3_abstract_factory.ex2.cars.Pickup;
public class PickupFactory extends CarFactory {
@Override
public Car createCar() {
return new Pickup();
}
}

View File

@@ -0,0 +1,9 @@
package lab3_abstract_factory.ex2.cars;
import lab3_abstract_factory.ex2.Car;
public class Coupe extends Car {
public Coupe() {
this.name = "Coupe";
}
}

View File

@@ -0,0 +1,9 @@
package lab3_abstract_factory.ex2.cars;
import lab3_abstract_factory.ex2.Car;
public class Minivan extends Car {
public Minivan() {
this.name = "Minivan";
}
}

View File

@@ -0,0 +1,9 @@
package lab3_abstract_factory.ex2.cars;
import lab3_abstract_factory.ex2.Car;
public class Pickup extends Car {
public Pickup() {
this.name = "Pickup";
}
}

View File

@@ -0,0 +1,16 @@
package lab4_command.ex1;
public class Car {
public void forward() {
System.out.println("Car goes forward");
}
public void backward() {
System.out.println("Car goes backward");
}
public void left() {
System.out.println("Car goes left");
}
public void right() {
System.out.println("Car goes right");
}
}

View File

@@ -0,0 +1,10 @@
package lab4_command.ex1;
public abstract class CarCommand {
protected Car car;
public CarCommand(Car car) {
this.car = car;
}
public abstract void execute();
public abstract void undo();
}

View File

@@ -0,0 +1,38 @@
package lab4_command.ex1;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class Game {
private final Map<Integer, CarCommand> actions = new HashMap<>();
private final Stack<CarCommand> history = new Stack<>();
public Car car;
public Game() {
car = new Car();
}
public void bindKey(int key, CarCommand command) {
actions.put(key, command);
}
public void unbindKey(int key) {
actions.remove(key);
}
public void pushKey(int key) {
if (actions.containsKey(key)) {
CarCommand action = actions.get(key);
action.execute();
history.push(action);
}
}
public void undo() {
if (history.empty()) {
return;
}
history.pop().undo();
}
}

View File

@@ -0,0 +1,25 @@
package lab4_command.ex1;
import lab4_command.ex1.commands.BackwardCommand;
import lab4_command.ex1.commands.ForwardCommand;
import lab4_command.ex1.commands.LeftCommand;
import lab4_command.ex1.commands.RightCommand;
public class MobilePhone {
public static void main(String[] args) {
Game game = new Game();
game.bindKey(0, new ForwardCommand(game.car));
game.bindKey(1, new BackwardCommand(game.car));
game.bindKey(2, new LeftCommand(game.car));
game.bindKey(3, new RightCommand(game.car));
game.pushKey(2);
game.pushKey(2);
game.pushKey(3);
game.pushKey(2);
game.pushKey(0);
game.pushKey(1);
game.undo();
}
}

View File

@@ -0,0 +1,20 @@
package lab4_command.ex1.commands;
import lab4_command.ex1.Car;
import lab4_command.ex1.CarCommand;
public class BackwardCommand extends CarCommand {
public BackwardCommand(Car car) {
super(car);
}
@Override
public void execute() {
car.backward();
}
@Override
public void undo() {
car.forward();
}
}

View File

@@ -0,0 +1,20 @@
package lab4_command.ex1.commands;
import lab4_command.ex1.Car;
import lab4_command.ex1.CarCommand;
public class ForwardCommand extends CarCommand {
public ForwardCommand(Car car) {
super(car);
}
@Override
public void execute() {
car.forward();
}
@Override
public void undo() {
car.backward();
}
}

View File

@@ -0,0 +1,20 @@
package lab4_command.ex1.commands;
import lab4_command.ex1.Car;
import lab4_command.ex1.CarCommand;
public class LeftCommand extends CarCommand {
public LeftCommand(Car car) {
super(car);
}
@Override
public void execute() {
car.left();
}
@Override
public void undo() {
car.right();
}
}

View File

@@ -0,0 +1,20 @@
package lab4_command.ex1.commands;
import lab4_command.ex1.Car;
import lab4_command.ex1.CarCommand;
public class RightCommand extends CarCommand {
public RightCommand(Car car) {
super(car);
}
@Override
public void execute() {
car.right();
}
@Override
public void undo() {
car.left();
}
}

View File

@@ -0,0 +1,8 @@
package lab4_command.ex2;
public abstract class FileAction implements MenuAction {
protected TextFile file;
public FileAction(TextFile file) {
this.file = file;
}
}

View File

@@ -0,0 +1,5 @@
package lab4_command.ex2;
public interface MenuAction {
void execute();
}

View File

@@ -0,0 +1,56 @@
package lab4_command.ex2;
import lab4_command.ex2.actions.*;
import java.util.ArrayList;
public class TextEditor {
private ArrayList<MenuAction> menu = new ArrayList<>();
private TextFile file;
public TextEditor(TextFile file) {
this.file = file;
addMenuAction(new OpenAction(this.file));
addMenuAction(new CloseAction(this.file));
addMenuAction(new SaveAction(this.file));
addMenuAction(new CopyAction(this.file));
addMenuAction(new PasteAction(this.file));
}
public void clickMenu(int entry) {
MenuAction action = null;
try {
action = menu.get(entry);
} catch (IndexOutOfBoundsException e) {
System.out.println("No action bound to entry " + entry);
}
if (action != null) {
action.execute();
}
}
public void addMenuAction(MenuAction action) {
menu.add(action);
}
public void removeMenuAction(int i) {
menu.remove(i);
}
public void setMenuAction(int i, MenuAction action) {
menu.set(i, action);
}
public static void main(String[] args) {
TextFile file = new TextFile("test.txt");
TextEditor editor = new TextEditor(file);
editor.clickMenu(0);
editor.clickMenu(1);
editor.clickMenu(2);
editor.clickMenu(3);
editor.clickMenu(4);
}
}

View File

@@ -0,0 +1,29 @@
package lab4_command.ex2;
public class TextFile {
private String name;
public TextFile(String name) {
this.name = name;
}
public void open() {
System.out.println("Opening file " + name);
}
public void close() {
System.out.println("Closing file " + name);
}
public void save() {
System.out.println("Saving file " + name);
}
public void copy() {
System.out.println("Copying file " + name);
}
public void paste() {
System.out.println("Pasting file " + name);
}
}

View File

@@ -0,0 +1,15 @@
package lab4_command.ex2.actions;
import lab4_command.ex2.FileAction;
import lab4_command.ex2.TextFile;
public class CloseAction extends FileAction {
public CloseAction(TextFile file) {
super(file);
}
@Override
public void execute() {
file.close();
}
}

View File

@@ -0,0 +1,15 @@
package lab4_command.ex2.actions;
import lab4_command.ex2.FileAction;
import lab4_command.ex2.TextFile;
public class CopyAction extends FileAction {
public CopyAction(TextFile file) {
super(file);
}
@Override
public void execute() {
file.copy();
}
}

View File

@@ -0,0 +1,15 @@
package lab4_command.ex2.actions;
import lab4_command.ex2.FileAction;
import lab4_command.ex2.TextFile;
public class OpenAction extends FileAction {
public OpenAction(TextFile file) {
super(file);
}
@Override
public void execute() {
file.open();
}
}

View File

@@ -0,0 +1,15 @@
package lab4_command.ex2.actions;
import lab4_command.ex2.FileAction;
import lab4_command.ex2.TextFile;
public class PasteAction extends FileAction {
public PasteAction(TextFile file) {
super(file);
}
@Override
public void execute() {
file.paste();
}
}

View File

@@ -0,0 +1,15 @@
package lab4_command.ex2.actions;
import lab4_command.ex2.FileAction;
import lab4_command.ex2.TextFile;
public class SaveAction extends FileAction {
public SaveAction(TextFile file) {
super(file);
}
@Override
public void execute() {
file.save();
}
}

View File

@@ -0,0 +1,6 @@
package learn.simple_abstract_factory;
public interface AbstractFactory {
public AbstractProductA createProductA();
public AbstractProductB createProductB();
}

View File

@@ -0,0 +1,4 @@
package learn.simple_abstract_factory;
public interface AbstractProductA {
}

View File

@@ -0,0 +1,4 @@
package learn.simple_abstract_factory;
public interface AbstractProductB {
}

View File

@@ -0,0 +1,29 @@
package learn.simple_abstract_factory;
public class Client {
private AbstractFactory abstractFactory;
private AbstractProductA productA;
private AbstractProductB productB;
public Client(AbstractFactory abstractFactory) {
this.abstractFactory = abstractFactory;
}
public void setup() {
productA = abstractFactory.createProductA();
productB = abstractFactory.createProductB();
}
public void setAbstractFactory(AbstractFactory abstractFactory) {
this.abstractFactory = abstractFactory;
}
@Override
public String toString() {
return "Client{" +
"productA=" + productA +
", productB=" + productB +
'}';
}
}

View File

@@ -0,0 +1,13 @@
package learn.simple_abstract_factory;
public class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}

View File

@@ -0,0 +1,13 @@
package learn.simple_abstract_factory;
public class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}

View File

@@ -0,0 +1,16 @@
package learn.simple_abstract_factory;
public class Main {
public static void main(String[] args) {
Client client1 = new Client(new ConcreteFactory1());
Client client2 = new Client(new ConcreteFactory1());
client1.setup();
client2.setAbstractFactory(new ConcreteFactory2());
client2.setup();
System.out.println(client1);
System.out.println(client2);
}
}

View File

@@ -0,0 +1,8 @@
package learn.simple_abstract_factory;
public class ProductA1 implements AbstractProductA {
@Override
public String toString() {
return "ProductA1";
}
}

View File

@@ -0,0 +1,8 @@
package learn.simple_abstract_factory;
public class ProductA2 implements AbstractProductA {
@Override
public String toString() {
return "ProductA2";
}
}

View File

@@ -0,0 +1,8 @@
package learn.simple_abstract_factory;
public class ProductB1 implements AbstractProductB {
@Override
public String toString() {
return "ProductB1";
}
}

View File

@@ -0,0 +1,8 @@
package learn.simple_abstract_factory;
public class ProductB2 implements AbstractProductB {
@Override
public String toString() {
return "ProductB2";
}
}

View File

@@ -0,0 +1,5 @@
package learn.simple_command;
public interface Command {
void execute();
}

View File

@@ -0,0 +1,14 @@
package learn.simple_command;
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}

View File

@@ -0,0 +1,13 @@
package learn.simple_command;
public class Invoker {
private Command slot;
public void setSlot(Command slot) {
this.slot = slot;
}
public void buttonWasPushed() {
slot.execute();
}
}

View File

@@ -0,0 +1,12 @@
package learn.simple_command;
public class Main {
public static void main(String[] args) {
Invoker invoker = new Invoker();
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
invoker.setSlot(command);
invoker.buttonWasPushed();
}
}

View File

@@ -0,0 +1,7 @@
package learn.simple_command;
public class Receiver {
public void action() {
System.out.println("Do my action");
}
}

View File

@@ -0,0 +1,8 @@
package learn.simple_factory_method;
public class ConcreteCreator extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProduct("Product");
}
}

View File

@@ -0,0 +1,14 @@
package learn.simple_factory_method;
public class ConcreteProduct implements Product {
private String category;
public ConcreteProduct(String category) {
this.category = category;
}
@Override
public String toString() {
return "ConcreteProduct('" + category + "')";
}
}

View File

@@ -0,0 +1,10 @@
package learn.simple_factory_method;
public abstract class Creator {
abstract public Product factoryMethod();
public void anOperation() {
Product product = this.factoryMethod();
System.out.println("Do something with product " + product);
}
}

View File

@@ -0,0 +1,8 @@
package learn.simple_factory_method;
public class Main {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
creator.anOperation();
}
}

View File

@@ -0,0 +1,4 @@
package learn.simple_factory_method;
public interface Product {
}