tp2.pdf
(
462 KB
)
Pobierz
abstract class
Pizza
{
public abstract
double
getPrice();
}
class
HamAndMushroomPizza
extends
Pizza
{
private
double
price
=
8.5;
public
double
getPrice()
{
return
price;
}
}
class
DeluxePizza
extends
Pizza
{
private
double
price
=
10.5;
public
double
getPrice()
{
return
price;
}
}
class
HawaiianPizza
extends
Pizza
{
private
double
price
=
11.5;
public
double
getPrice()
{
return
price;
}
}
class
PizzaFactory
{
public enum
PizzaType
{
HamMushroom,
Deluxe,
Hawaiian
}
public static
Pizza createPizza(PizzaType pizzaType)
{
switch
(pizzaType) {
case
HamMushroom:
return new
HamAndMushroomPizza();
case
Deluxe:
return new
DeluxePizza();
case
Hawaiian:
return new
HawaiianPizza();
}
throw new
IllegalArgumentException("The
pizza type "
+
pizzaType
+
" is not recognized.");
}
}
class
PizzaLover
{
/**
* Create all available pizzas and print their prices
*/
public static
void
main
(String
args[])
{
System.out.println("Price
of "
+
pizzaType
+
" is "
+
PizzaFactory.createPizza(pizzaType).getPrice());
}
}
//Client
public class
GUIBuilder
{
public void
buildWindow(AbstractWidgetFactory widgetFactory)
{
Window window = widgetFactory.createWindow();
window.setTitle("New
Window");
}
}
Abstract Factory:
public class
Main{
public static void
main(String[] args)
{
GUIBuilder builder =
new
GUIBuilder();
AbstractWidgetFactory widgetFactory =
null;
//check what platform we're on
if(Platform.currentPlatform()=="MACOSX")
{
widgetFactory =
new
MacOSXWidgetFactory();
}
else
{
widgetFactory =
new
MsWindowsWidgetFactory();
}
builder.buildWindow(widgetFactory);
}
//ConcreteProductA1
public class MSWindow implements Window
{
public void setTitle()
{
//MS Windows specific behaviour
}
public void repaint()
{
//MS Windows specific behaviour
}
//AbstractFactory
public interface AbstractWidgetFactory
{
public Window createWindow();
}
ABSTRACT FACTORY
FACTORY METHOD (metoda
wytwórcza)
BUILDER
Builder:
class Produkt
{
public:
void dodajCzesc(std::string czesc) { /*...*/ }
};
class Budowniczy
{
public:
void zbudujCzescA() = 0;
void zbudujCzescB() = 0;
Produkt pobierzWynik() = 0;
};
// buduje obiekt z czesci
class BudowniczyJakis : public Budowniczy
{
Produkt *produkt;
public:
void zbudujCzescA()
{
czesc.dodajCzesc( "CzescA" );
}
void zbudujCzescB()
{
czesc.dodajCzesc( "CzescB" );
}
Produkt *pobierzWynik()
{
return produkt;
}
};
class Dyrektor
{
public:
void Konstruuj(Budowniczy *budowniczy)
{
budowniczy.zbudujCzescA();
budowniczy.zbudujCzescB();
}
};
// sposób wykorzystania
int main()
{
Dyrektor *director = new Dyrektor();
Budowniczy *builder = new BudowniczyJakis();
Produkt *product;
director.Konstruuj(builder);
product = builder.pobierzWynik();
/* ... */
}
Decorator:
/* Standardowy nieudekorowany samochod */
abstract class Samochod {
protected String samochod = "Samochod podstawowy";
public String about() {
return samochod;
}
public abstract double cena();
}
/* abstrakcyjny dekorator */
abstract class Dekorator extends Samochod {
public abstract String about();
}
/* teraz mamy 2 przykladowe marki samochodow */
class Mercedes extends Samochod {
public Mercedes() {
samochod = "Mercedes";
}
public double cena() {
return 500000;
}
}
class Fiat extends Samochod {
public Fiat() {
samochod = "Fiat";
}
public double cena() {
return 100000;
}
}
/* czas na same dodatki */
class Klimatyzacja extends Dekorator {
Samochod samochod;
public Klimatyzacja(Samochod samochod) {
this.samochod = samochod;
}
public String about() {
return samochod.about() + " + klimatyzacja";
}
public double cena() {
if(samochod instanceof Mercedes) {
return samochod.cena() + 100000;
}
else
if(samochod instanceof Fiat) {
return samochod.cena() + 20000;
}
return 0.;
}
}
class OponyZimowe extends Dekorator
Samochod samochod;
{
public class Main {
public static void main(String[]args) {
Samochod s1 = new Mercedes();
Samochod s2 = new Fiat();
System.out.println("\nBez wyposazenia");
System.out.println(s2.about() + " " + s2.cena());
//dodajemy po klimie
s1 = new Klimatyzacja(s1);
s2 = new Klimatyzacja(s2);
System.out.println("\nZ Klima");
System.out.println(s1.about() + " " + s1.cena());
// i opony
s1 = new OponyZimowe(s1);
s2 = new OponyZimowe(s2);
System.out.println("\nZ oponami");
System.out.println(s1.about() + " " + s1.cena());
System.out.println(s2.about() + " " + s2.cena());
//odrazu tworzymy wyposazony samochod
System.out.println("\nPelne wyposazenie");
Samochod s3 = new OponyZimowe(new Klimatyzacja(new Mercedes()));
System.out.println(s3.about() + " " + s1.cena());
}
}
class MenedzerPlikow {
private static MenedzerPlikow instancja = null;
private int identyfikator;
private MenedzerPlikow() {
identyfikator = (int)((Math.random()*10)%10);
}
//-------------
1 sposob
public static synchronized MenedzerPlikow dawajMenedzer() {
if(instancja == null) {
instancja = new MenedzerPlikow();
return instancja;
}
System.out.println("Menedzer juz zostal wczesniej utworzony!");
return instancja;
}
public void about() {
System.out.println("Identyfiaktor = " + identyfikator);
}
/*----------
2 sposob
// nie inicjujemy tutan nullem, instancja juz od poczatku posiada wartosc
private final static MenedzerPlikow instancja = new MenedzerPlikow();
public static MenedzerPlikow dawajMenedzer(){
return instancja;
}
*/
/*------------
3 sposob - metoda podwojnego blokowania
private static volatile MenedzerPlikow instancja=null;
public static MenedzerPlikow dawajMenedzer(){
if(instancja == null){
synchronized (MenedzerPlikow.class){
instancja = new MenedzerPlikow();
}
}
return instancja;
}
*/
}
SINGLETON
public OponyZimowe(Samochod samochod) {
this.samochod = samochod;
}
public String about() {
return samochod.about() + " + opony zimowe";
}
/* niech ceny beda takie same */
public double cena() {
return samochod.cena() + 31234;
}
}
DECORATOR
public class Singleton {
public static void main(String[]args) {
MenedzerPlikow[] tab = new MenedzerPlikow[3];
tab[0] = MenedzerPlikow.dawajMenedzer();
tab[1] = MenedzerPlikow.dawajMenedzer();
tab[2] = MenedzerPlikow.dawajMenedzer();
for(MenedzerPlikow object : tab)
object.about() ;
}
}
Plik z chomika:
adiau2
Inne pliki z tego folderu:
tp.docx
(563 KB)
tp2.pdf
(462 KB)
tp2.docx
(264 KB)
tp2b.docx
(57 KB)
Inne foldery tego chomika:
Bazy danych
Podstawy zarządzania firmą informatyczną
Zgłoś jeśli
naruszono regulamin