.


:




:

































 

 

 

 


10 3




( ) . :

, , ( );

() (), .

GoF

GoF , . .
.

, , , , , . ( ).

:

1. .
. .

2. . .

3. . .

4. .

, . , .

.

:

Abstract Factory ( ) ;

Factory () ( Abstract Factory);

Builder () ;

Singleton () ;

Prototype () . , - ;

Factory Method ( ) , .

Factory

, . , .

. 5.6. Factory

ClassFactory getClassFromFactory(String id), - Base .
, Base.

.

/* # 10: Factory: Base.java: First.java: Second.java: ClassFactory.java: Main.java */

package chapt05.factory;

public abstract class Base {

public abstract void perform();

}

package chapt05.factory;

public class First extends Base {

public void perform() {

System. out. println("First");

}

}

package chapt05.factory;

public class Second extends Base {

public void perform() {

System. out. println("Second");

}

}

package chapt05.factory;

public class ClassFactory {

private enum Signs { FIRST, SECOND }

public static Base getClassFromFactory(String id) {

Signs sign = Signs. valueOf (id.toUpperCase());

switch (sign){

case FIRST: return new First();

case SECOND: return new Second();

default: throw new EnumConstantNotPresentException(

Signs. class, sign.name());

}

}

}

package chapt05.factory;

public class Main {

public static void main(String args[]) {

Base ob1 =

ClassFactory. getClassFromFactory ("first");

Base ob2 =

ClassFactory. getClassFromFactory ("second");

ob1.perform();

ob2.perform();

}

}

# 5 .

AbstractFactory

, , . - . .

. - , .

. , .

/* # 11: - :

AbstractFactory.java */

package chapt05.abstractfactory;

public class AbstractFactory {

enum Color { BLACK, WHITE };

public static BaseFactory getFactory(String data) { Color my = Color.valueOf(data.toUpperCase());

switch (my){

case BLACK: return new BlackFactory();

case WHITE: return new WhiteFactory();

default: throw new

EnumConstantNotPresentException(Signs. class, sign.name());

}

}

}

. 5.7. AbstractFactory

. BaseFactory , BlackFactory WhiteFactory , . -.

/* # 12: - :

BaseFactory.java: BlackFactory.java: WhiteFactory.java */

package chapt05.abstractfactory;

public abstract class BaseFactory {

public abstract Circle createCircle(double radius);

public abstract Triangle createTriangle(double a,

double b);

}

package chapt05.abstractfactory;

public class BlackFactory extends BaseFactory {

public Circle createCircle(double radius) {

return new BlackCircle(radius);

}

public Triangle createTriangle(double a, double b){

return new BlackTriangle(a,b);

}

}

package chapt05.abstractfactory;

public class WhiteFactory extends BaseFactory {

public Circle createCircle(double radius) {

return new WhiteCircle(radius);

}

public Triangle createTriangle(double a, double b){

return new WhiteTriangle(a, b);

}

}

-: Circle, Triangle. :
.

/* # 13: -: Circle.java: Triangle.java */

package chapt05.abstractfactory;

public abstract class Circle {

protected double radius;

protected String color;

public abstract void square();

}

package chapt05.abstractfactory;

public class BlackCircle extends Circle {

public BlackCircle(double radius){

this. radius = radius;

color = "Black";

}

public void square(){

double s = Math.PI * Math.pow(radius, 2);

System. out. println(color + " Circle"

+ " Square = " + s);

}

}

package chapt05.abstractfactory;

public class WhiteCircle extends Circle{

public WhiteCircle(double radius){

this. radius = radius;

color = "White";

}

public void square(){

double s = Math.PI * Math.pow(radius, 2);

System. out. println(color + " Circle "

+ "Square = " + s);

}

}

package chapt05.abstractfactory;

public abstract class Triangle {

protected double a, b;

protected String color;

public abstract void square();

}

package chapt05.abstractfactory;

public class BlackTriangle extends Triangle {

public BlackTriangle (double a, double b){

this. a = a;

this. b = b;

color = "Black";

}

public void square(){

double s = a * b / 2;

System. out. println(color + " Triangle"

+ " Square = " + s);

}

}

package chapt05.abstractfactory;

public class WhiteTriangle extends Triangle {

public WhiteTriangle (double a, double b) {

this. a = a;

this. b = b;

color = "White";

}

public void square(){

double s = 0.5 * a * b;

System. out. println(color + " Triangle"

+ " Square = " + s);

}

}

.

/* # 14: AbstractFactory: Main.java */

package chapt05.abstractfactory;

public class Main {

public static void main(String[] args) {

BaseFactory factory1 =

AbstractFactory. getFactory ("black");

BaseFactory factory2 =

AbstractFactory. getFactory ("white");

Circle ob1 = factory1.createCircle(1.232);

Circle ob2 = factory2.createCircle(1);

Triangle ob3 = factory1.createTriangle(12,5);

Triangle ob4 = factory2.createTriangle(1,7);

 

ob1.square();

ob2.square();

ob3.square();

ob4.square();

}

}

Builder

, . .

. 5.8. Builder

BaseBuilder User. XMLBuilder DBBuilder User, . - , , . -.

Builder .

/* # 15: : User.java */

package chapt05.builder;

public class User {

private String login = "Guest";

private String password = "Kc";

 

public String getLogin() {

return login;

}

public void setLogin(String login) {

this. login = login;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this. password = password;

}

}

BaseBuilder -, . XMLBuilder DBBuilder , . , User .

/* # 16: : BaseBuilder.java: XMLBuilder.java: DBBuilder.java */

package chapt05.builder;

public abstract class BaseBuilder {

protected User user = new User();

 

public User getUser() {

return user;

}

public abstract void buildLogin();

public abstract void buildPassword();

}

package chapt05.builder;

public class XMLBuilder extends BaseBuilder {

 

public void buildLogin() {

//

user.setLogin("Admin");

}

public void buildPassword() {

//

user.setPassword("Qu");

}

}

package chapt05.builder;

public class DBBuilder extends BaseBuilder {

 

public void buildLogin() {

//

user.setLogin("Moderator");

}

public void buildPassword() {

//

user.setPassword("Ku");

}

}

.

/* # 17: : Main.java */

package chapt05.builder;

public class Main {

private static User buildUser(BaseBuilder builder) {

builder.buildLogin();

builder.buildPassword();

return builder.getUser();

}

public static void main(String args[]) {

User e1 = buildUser (new XMLBuilder());

User e2 = buildUser (new DBBuilder());

 

System. out. println(e1.getLogin());

System. out. println(e1.getPassword());

System. out. println(e2.getLogin());

System. out. println(e2.getPassword());

}

}

Singleton

, . .

/* # 18: : Singleton.java */

package chapt05.singleton;

public class Singleton {

 

private static Singleton instance = null;

private SingletonTrust() {

}

public static Singleton getInstance() {

if (instance == null) {

System. out. println("Creating Singleton");

instance = new Singleton();

}

return instance;

}

}

getInstance(), . , .

.

:

Proxy () ;

Composite () , ;

Adapter () . ;

Bridge () , ;

Decorator () . ;

Facade () .

Bridge

(Abstraction) (Implementor) , . Bridge , . . , .

. 5.9. Bridge

/* # 18: Implementor : Color.java: YellowColor.java */

package chapt05.implementor;

public abstract class Color { //implementor

public abstract void useBrush();

}

package chapt05.implementor;

public class YellowColor extends Color {

public void useBrush() {

System. out. println("BrushColor - Yellow");

}

}

Color , Implementor.
YellowColor Color.

/* # 19: : Shape.java: Circle.java:

Rectangle.java */

package chapt05.abstraction;

import chapt05.implementor.*;

public abstract class Shape { //abstraction

protected Color color;

 

public Shape (){

color = null;

}

public Color getColor() {

return color;

}

public void setColor(Color color) {

this. color = color;

}

public abstract void performWithColor();

}

package chapt05.abstraction;

import chapt05.implementor.*;

public class Circle extends Shape {

public Circle(Color color) {

setColor(color);

}

public void performWithColor() {

System. out. println("Performing in Circle class");

color.useBrush();

}

}

package chapt05.abstraction;

import chapt05.implementor.*;

public class Rectangle extends Shape {

public Rectangle(Color color) {

setColor(color);

}

public void performWithColor() {

System. out. println("Performing in Rectangle class");

color.useBrush();

}

}

Shape , Circle Rectangle .

/* # 20: Bridge: Main.java */

package chapt05.bridge;

import chapt05.abstraction.*;

import chapt05.implementor.*;

public class Main {

public static void main(String args[]) {

YellowColor color = new YellowColor();

new Rectangle(color).performWithColor();

new Circle(color).performWithColor();

}

}

. . Abstraction Implementor .

Decorator

, . , , . Decorator .

. 5.10. Decorator

/* # 21: : Driver.java */

package chapt05.decorator;

public abstract class Driver {

public abstract void do();

}

DriverDecorator , Driver, .

/* # 22: - Driver: DriverDecorator.java */

package chapt05.decorator;

public abstract class DriverDecorator extends Driver {

protected Driver driver;

 

public DriverDecorator(Driver driver) {

this. driver = driver;

}

public void do() {

driver.do();

}

}

CarDriver , .

/* # 23: : CarDriver.java */

package chapt05.decorator;

public class CarDriver extends Driver {

public void do() { //

System. out. println("I am a driver");

}

}

BusDriver
addedBehaviorOne() , do() CarDriver.

/* # 24: : BusDriver.java */

package chapt05.decorator;

public class BusDriver extends DriverDecorator {

 

public BusDriver(Driver driver) {

super (driver);

}

private void addedBehaviorOne() {

System. out. println("I am bus driver");

}

public void do() {

driver.do();

addedBehaviorOne();

}

}

CarDriverAndForwardingAgent addedBehaviorTwo() -, do() CarDriver.

/* # 25: -:CarDriverAndForwardingAgent.java*/

package chapt05.decorator;

public class CarDriverAndForwardingAgent

extends DriverDecorator {

 

public CarDriverAndForwardingAgent(Driver driver){

super (driver);

}

private void addedBehaviorTwo() {

System. out. println("I am a Forwarding Agent");

}

public void do() {

driver.do();

addedBehaviorTwo();

}

}

CarDriver , -, .

/* # 26: Decorator: Main.java */

package chapt05.decorator;

public class Main {

public static void main(String args[]){

Driver carDriver = new CarDriver();

Main runner = new Main();

runner.doDrive(carDriver);

 

runner.doDrive(new BusDriver(carDriver));

runner.doDrive(

new CarDriverAndForwardingAgent(carDriver));

}

public void doDrive(Driver driver){

driver.do();

}

}

.

:

Chain of Responsibility ( ) - -, ;

Command () , ;

Iterator () , ;

Mediator () , , ;

Memento () ;

Observer () ;





:


: 2016-04-03; !; : 473 |


:

:

, .
==> ...

1478 - | 1317 -


© 2015-2024 lektsii.org - -

: 0.844 .